从Enterprise Library 5升级到6:EnterpriseLibraryContainer.GetInstance替代方案问询
Enterprise Library 6 替代 EnterpriseLibraryContainer.GetInstance 获取 Database 实例的方案
核心变化说明
Enterprise Library 6 移除了基于Unity的全局容器管理,每个模块改用独立的工厂类处理初始化和实例获取,数据访问模块对应的就是 DatabaseProviderFactory。
基于配置文件的实现(和原有代码逻辑最匹配)
如果你的应用依然依赖配置文件中的连接字符串和EntLib配置,按以下步骤修改:
- 确保配置文件(app.config/web.config)包含Data Access模块的配置节,示例如下:
<configuration> <configSections> <section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" /> </configSections> <!-- 指定默认数据库(可选) --> <dataConfiguration defaultDatabase="SomeDatabaseWeUse" /> <connectionStrings> <add name="SomeDatabaseWeUse" connectionString="你的数据库连接字符串" providerName="System.Data.SqlClient" /> </connectionStrings> </configuration>
- 替换原有获取实例的代码:
// 全局初始化一次即可(比如在应用启动时) var databaseFactory = new DatabaseProviderFactory(); // 获取指定名称的数据库实例,替代原来的EnterpriseLibraryContainer.GetInstance Database db = databaseFactory.Create("SomeDatabaseWeUse");
如果要获取配置中指定的默认数据库,可简化为:
Database db = databaseFactory.CreateDefault();
基于代码配置的实现(不依赖配置文件)
如果需要完全通过代码配置数据库连接,无需修改配置文件:
// 定义连接字符串 var connectionStringSettings = new ConnectionStringSettings( "SomeDatabaseWeUse", "你的数据库连接字符串", "System.Data.SqlClient"); // 构建数据库配置 var databaseConfig = new DatabaseSettings(); databaseConfig.ConnectionStrings.Add(connectionStringSettings); databaseConfig.DefaultDatabase = "SomeDatabaseWeUse"; // 初始化工厂并获取实例 var databaseFactory = new DatabaseProviderFactory(databaseConfig); Database db = databaseFactory.Create("SomeDatabaseWeUse");
额外提示
DatabaseProviderFactory建议全局单例复用,避免重复初始化带来的性能开销- 原有代码中通过
ConfigurationManager.ConnectionStrings["SomeDatabaseWeUse"].Name获取连接名的逻辑可以直接保留,传入Create方法即可
内容的提问来源于stack exchange,提问作者Daniel Carriveau
相关产品推荐
相关产品推荐

