好吧,我正在进入这个梦幻般的网站,并提出了将配置设置注入应用程序组件的正确方法的问题.因此,概述是:我有一个用C#.Net 3.5编写的应用程序.它由3个程序集组成 - 核心,数据和服务.数据和服务程序集需要从app.config检索的设置,这可以通过设置文件完成,例如.
代码:
public static String RequestQueueConnectionString
{
get { return ConnectionSettings.Default.RequestQueueConnectionString; }
}
Run Code Online (Sandbox Code Playgroud)
配置:
<applicationSettings>
<MyNamespace.Data.ConnectionSettings>
<setting name="RequestQueueConnectionString" serializeAs="String">
...
Run Code Online (Sandbox Code Playgroud)
现在,程序集都是使用StructureMap for IoC进行设置的 - 我认为应该提供我正在寻找的答案,但我只是看不到它!
IoC:
public static void ConfigureStructureMap(IContainer container)
{
container.Configure(x => ...
...
Run Code Online (Sandbox Code Playgroud)
我希望能够做的是注入一个已经填充到IoC容器中的配置类,以便这些设置用于该程序集,而不是设置文件/ app.config中指定的那些设置.所以也许:
public static void ConfigureStructureMap(IContainer container, MyConfigClass config)
{
container.Configure(x => x.For<DataConfig>()
.Singleton()
.Use ???
...
Run Code Online (Sandbox Code Playgroud)
我希望我在这里提供了足够的细节 - 如果我没有,请原谅一个新手,请让我知道还有什么有助于回答这个问题!
所以我的问题是这个.当使用Data Context ExecuteQuery(字符串查询,params object []参数)(这里)时,我无法以任何形式或形式传递null.启动此操作的参数是SQL nvarchar参数,需要允许空值.
我在stackoverflow上阅读了这篇文章,其中"使用DBNull.Value"标记为答案 - 所以我尝试了,没有任何东西(所以想知道如果它不起作用的答案,如果它不起作用??!).
这是我试图运行的示例代码(注意,这只是为了测试这个概念):
var db = new Test1DataContext(Properties.Settings.Default.TestConnectionString);
var query = "EXEC UpInsertTest4 {0}, {1}";
// Works fine
var list1 = new List<object> { 1, "1" };
db.ExecuteQuery<UpInsertTest4Result>(query, list1.ToArray());
// Doesn't work
var list2 = new List<object> { 1, DBNull.Value };
db.ExecuteQuery<UpInsertTest4Result>(query, list2.ToArray());
Run Code Online (Sandbox Code Playgroud)
以下是我收到的各种错误:
null : A query parameter cannot be of type 'System.Object'.
default(string) : A query parameter cannot be of type 'System.Object'.
DBNull.Value : Unexpected type code: …Run Code Online (Sandbox Code Playgroud)