【问题标题】:.Net Core Dependency Injection IdbConnection.Net 核心依赖注入 IdbConnection
【发布时间】:2018-12-14 03:10:00
【问题描述】:

我有一个使用 autofac 进行依赖注入的 .NET MVC 应用程序。 当应用启动时,以下代码注册 IDbConnection

var connectionString =  ConfigurationManager.ConnectionStrings["DBConnectionStringName"].ConnectionString;
this.Register(c => new SqlConnection(connectionString)).As<IDbConnection>().InstancePerRequest();

我正在尝试使用框架提供的默认依赖注入机制在 .Net Core MVC 中执行相同的操作。 我正在考虑添加类似的内容

 public void ConfigureServices(IServiceCollection services)
        {
            services.AddTransient<IDbConnection, SqlConnection>();

但我不知道在哪里添加连接字符串

【问题讨论】:

    标签: c# dependency-injection asp.net-core-mvc idbconnection


    【解决方案1】:

    我相信我找到了。 这是

    services.AddTransient<IDbConnection>(db => new SqlConnection(
                        Configuration.GetConnectionString("AppConnectionString")));
    

    【讨论】:

    • 是的,在这种情况下,使用工厂委托重载是正确的方法。
    • AddScoped 将等同于 InstancePerRequestAddTransient 等同于 InstancePerDependency
    • 你确定吗?我以为是相反的。我认为 AddScoped 相当于 InstancePerDependency
    • 我得到的结果好坏参半,我认为这可能与连接池的完成方式有关。基本上,我有 3 个存储库,它们都将 IDbConnection 作为瞬态注入。如果我并行查询每个存储库,我会收到一个 MARS 错误,告诉我它们都使用相同的连接。
    • 如果你让 IDbConnection 是瞬态的,这会和单例业务服务冲突吗?我宁愿不要让我的无状态业务服务瞬态,因为这会消耗不必要的内存。
    猜你喜欢
    • 2019-02-16
    • 2021-03-02
    • 1970-01-01
    • 1970-01-01
    • 2017-12-09
    • 2020-01-17
    • 2018-01-03
    • 2019-01-31
    • 2019-11-18
    相关资源
    最近更新 更多