【发布时间】:2019-10-11 10:52:17
【问题描述】:
我正在使用默认的 .Net Core DI (Microsoft.Extensions.DependencyInjection)。我需要解决用另一个实例替换特定依赖项的服务。在我的情况下,它是一个数据库连接,所以它不是一级依赖。目前我发现的唯一可行的解决方案是从头开始创建一个新的服务提供商,但这对我来说似乎是一个巨大的开销。有没有办法继承现有配置来替换单个接口实现? IServiceProvider 和 IServiceScopeFactory 接口没有任何方法可以修改任何内容。
【问题讨论】:
-
内置 DI 实现没有嵌套范围/子容器,但您可以轻松配置它以使用其他 DI 实现,例如 Autofac
-
但是 .Asp.Net Core 本身以某种方式为每个新范围(请求)提供了一个特定的实现,如 HttpContext,因此即使使用内置 DI 也应该可以实现
-
是的,因为这些是范围服务。但是,这里没有机会切换每个范围提供依赖项的方式。获取新实例的机制始终相同,在启动时定义。
-
这说明 XY 问题。您要解决的实际问题是什么,因为这可能不是最好的方法。
标签: .net asp.net-core dependency-injection