对于我正在构建的应用程序,我想使用structuremap注入IDbConnection . 这里的问题有两方面:

  • 使用不同的配置(用于部署),我想使用不同的提供程序 . SqlServerCe用于本地和我们的开发服务器,SqlServer用于我们的测试和 生产环境 环境 .

  • 注入IDbConnection后,我注意到将参数添加到 IDbCommand 并不像我想象的那么容易:根据连接类型,我要么必须添加 System.Data.SqlServerCe.SqlCeParameterSystem.Data.SqlClient.SqlParameter ,而不是通用参数类型 .

第一个问题,我通过打开连接字符串的providerName,然后注入 System.Data.SqlServerCe.SqlCeConnectionSystem.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)并不是那么好,可能只是缺少一些非常基本的概念 .