.Net核心依赖项注入-替换子范围内的依赖项

时间:2019-10-11 10:52:17

标签: .net asp.net-core dependency-injection

我正在使用默认的.Net Core DI(Microsoft.Extensions.DependencyInjection)。我需要解决将特定依赖项替换为另一个实例的服务。在我的情况下,这是一个数据库连接,因此它不是一级依赖。目前,我发现唯一可行的解​​决方案是从头开始创建新的服务提供者,但对我来说,这似乎是一笔巨大的开销。有没有一种方法可以继承现有配置来替换单个接口实现? IServiceProviderIServiceScopeFactory接口没有任何方法可以修改任何内容。

1 个答案:

答案 0 :(得分:1)

是的,您可以插入Autofac,然后执行您想要的操作。

然后可以注入IServiceProvider来代替注入ILifetimeScope的实例。

这将允许您启动范围并仅为该范围替换实现,而无需进行其他操作。

using (var scope = _lifetimeScope.BeginScope(builder => builder.Register(_ => new MyClassThatRequiresAConnection(myConnectionString))))
{
  // this would resolve the latest registration of the class `MyClassThatRequiresAConnection`
   var myClass = scope.Resolve<MyClassThatRequiresAConnection>();
  // more code here ...
}