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