对于我正在构建的应用程序,我想使用structuremap注入IDbConnection . 这里的问题有两方面:
-
使用不同的配置(用于部署),我想使用不同的提供程序 . SqlServerCe用于本地和我们的开发服务器,SqlServer用于我们的测试和 生产环境 环境 .
-
注入IDbConnection后,我注意到将参数添加到
IDbCommand
并不像我想象的那么容易:根据连接类型,我要么必须添加System.Data.SqlServerCe.SqlCeParameter
或System.Data.SqlClient.SqlParameter
,而不是通用参数类型 .
第一个问题,我通过打开连接字符串的providerName,然后注入 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));
第二个问题似乎更棘手 . 它也将取决于提供者,但看到我需要在运行时为 IDataParameter
的实例提供参数名称和值,上面的"sollution"似乎不可行 .
然后,我最初的做法也可能完全脱离 .
有谁知道如何最好地解决这两个问题?我对于结构图(或一般的DI)并不是那么好,可能只是缺少一些非常基本的概念 .