【问题标题】:Understanding Dependency Injection for database connections in Dot Net Core了解 Dot Net Core 中数据库连接的依赖注入
【发布时间】:2017-08-20 03:49:47
【问题描述】:

我正在将优秀的数据库库 NReco.Data 用于我正在使用 MVC Core 开展的新 MVC 项目。

我正在尝试尽可能多地使用依赖注入。但是,让我困惑的是这个。根据我的 Startup.cs 中的以下代码,我如何实例化另一个指向不同数据库(或连接字符串)的 DbDataAdapter

public void ConfigureServices(IServiceCollection services)
{
    var dbconnectStringAppSettings = Configuration["DBConnectString"];
    services.AddDbContext<MisoIRListservDbContext>(options => options.UseSqlServer(dbconnectStringAppSettings));

    InjectNRecoDataService(services);

    // Repositories
    services.AddScoped<ListSettingRepository>();
    services.AddScoped<ListCategoryRepository>();
    services.AddScoped<MailingListRepository>();
    services.AddScoped<LISTSERVRepository>();

    // Services
    services.AddScoped<ListServEmailMailingListService>();
    services.AddScoped<ListCategoryMailingListService>();

    services.AddMvc();        

}

private void InjectNRecoDataService(IServiceCollection services)
{
    services.AddSingleton<IDbFactory, DbFactory>(servicePrv => new DbFactory(SqlClientFactory.Instance)
    {
        LastInsertIdSelectText = "SELECT @@IDENTITY"
    });
    services.AddSingleton<IDbCommandBuilder, DbCommandBuilder>(servicePrv =>
    {
        var dbCmdBuilder = new DbCommandBuilder(servicePrv.GetRequiredService<IDbFactory>());
        return dbCmdBuilder;
    });
    services.AddScoped<IDbConnection>(servicePrv =>
    {
        var dbCoreContext = servicePrv.GetRequiredService<MisoIRListservDbContext>();
        var conn = dbCoreContext.Database.GetDbConnection();
        return conn;
    });
    services.AddScoped<DbDataAdapter>();
}

【问题讨论】:

标签: c# asp.net-core-mvc .net-core


【解决方案1】:

我的观点是,SQL 连接等特定于数据库的东西不应该放在 IoC 容器中;这会导致您面临重用问题,以及管理其生命周期的其他问题。

将所有与数据库相关的内容保存在一个名为 repository(存储库模式)的类中会更好,该类封装了所有这些,并使外部世界忘记了细节 - 一旦你给出它是一个接口,您可以轻松地将其放入 IoC 容器中并将其换出(例如用于单元测试)。您会希望为域的不同区域拥有不同的存储库。

最终,您还需要研究工作单元模式,以了解涉及跨不同存储库的事务的更高级场景。

【讨论】:

    猜你喜欢
    • 2020-08-11
    • 2019-04-13
    • 2023-02-24
    • 1970-01-01
    • 2016-05-22
    • 1970-01-01
    • 2021-07-15
    • 2020-10-06
    • 2018-07-13
    相关资源
    最近更新 更多