对于我正在构建的应用程序,我想使用structuremap注入IDbConnection。这里的问题有两方面:
使用不同的配置(部署),我想使用不同的提供程序。 SqlServerCe用于本地和我们的开发服务器,SqlServer用于我们的测试和生产环境。
注入IDbConnection后,我注意到向IDbCommand
添加参数并不像我想象的那么容易:根据连接类型,我要么添加一个{ {1}}或System.Data.SqlServerCe.SqlCeParameter
,而不是通用参数类型。
第一个问题,我通过打开连接字符串的providerName“解决”,然后注入System.Data.SqlClient.SqlParameter
或System.Data.SqlServerCe.SqlCeConnection
,虽然这不是很漂亮,我希望有一个替代品。
代码:
System.Data.SqlClient.SqlConnection
第二个问题似乎更棘手。它也取决于提供者,但我认为我需要在运行时为For<System.Data.IDbConnection>().Use(() =>
ConfigurationManager.ConnectionStrings["DefaultConnection"].ProviderName.Contains("SqlServerCe")
? (IDbConnection)new SqlCeConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString)
: (IDbConnection)new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString));
的实例提供参数名称和值,上述“sollution”似乎不可行。
然后,我最初的做法可能也完全没有了。
有谁知道如何最好地解决这两个问题?我对于结构图(或一般的DI)并不是那么好,可能只是缺少一些非常基本的概念。