.Net 核心依赖注入 IdbConnection

Posted

技术标签:

【中文标题】.Net 核心依赖注入 IdbConnection【英文标题】:.Net Core Dependency Injection 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>();

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

【问题讨论】:

【参考方案1】:

我相信我找到了。 这是

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

【讨论】:

是的,在这种情况下,使用工厂委托重载是正确的方法。 AddScoped 将等同于 InstancePerRequestAddTransient 等同于 InstancePerDependency 你确定吗?我以为是相反的。我认为 AddScoped 相当于 InstancePerDependency 我得到的结果好坏参半,我认为这可能与连接池的完成方式有关。基本上,我有 3 个存储库,它们都将 IDbConnection 作为瞬态注入。如果我并行查询每个存储库,我会收到一个 MARS 错误,告诉我它们都使用相同的连接。 如果你让 IDbConnection 是瞬态的,这会和单例业务服务冲突吗?我宁愿不要让我的无状态业务服务瞬态,因为这会消耗不必要的内存。

以上是关于.Net 核心依赖注入 IdbConnection的主要内容,如果未能解决你的问题,请参考以下文章

共享 IDbConnection 以保持事务本地化

.net 核心依赖注入是不是支持 Lazy<T>

如何使用 asp.net 核心中的依赖注入在工作单元模式中延迟注入存储库

如何使用构造函数依赖注入对 asp.net 核心应用程序进行单元测试

带有身份的asp.net核心中的依赖注入错误

.NET CORE 依赖注入 实践总结