.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
将等同于 InstancePerRequest
。 AddTransient
等同于 InstancePerDependency
。
你确定吗?我以为是相反的。我认为 AddScoped 相当于 InstancePerDependency
我得到的结果好坏参半,我认为这可能与连接池的完成方式有关。基本上,我有 3 个存储库,它们都将 IDbConnection 作为瞬态注入。如果我并行查询每个存储库,我会收到一个 MARS 错误,告诉我它们都使用相同的连接。
如果你让 IDbConnection 是瞬态的,这会和单例业务服务冲突吗?我宁愿不要让我的无状态业务服务瞬态,因为这会消耗不必要的内存。以上是关于.Net 核心依赖注入 IdbConnection的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 asp.net 核心中的依赖注入在工作单元模式中延迟注入存储库