根据配置注入不同的具体类型的IDbConnection

时间:2014-11-24 09:50:36

标签: c# dependency-injection structuremap

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

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

  2. 注入IDbConnection后,我注意到向IDbCommand添加参数并不像我想象的那么容易:根据连接类型,我要么添加一个{ {1}}或System.Data.SqlServerCe.SqlCeParameter,而不是通用参数类型。

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

0 个答案:

没有答案