【发布时间】:2018-03-07 10:03:19
【问题描述】:
在我的Startup 类中,我使用ConfigureServices(IServiceCollection services) 方法设置我的服务容器,使用来自Microsoft.Extensions.DependencyInjection 的内置DI 容器。
我想在单元测试中验证依赖关系图,以检查是否可以构建所有服务,这样我就可以修复单元测试期间丢失的任何服务,而不是让应用程序在运行时崩溃。在之前的项目中,我使用了 Simple Injector,它有一个用于容器的 .Verify() 方法。但是我找不到任何与 ASP.NET Core 类似的东西。
是否有任何内置的(或至少推荐的)方法来验证整个依赖图是否可以构建?
(我能想到的最愚蠢的方法是这样的,但由于框架本身注入的开放泛型,它仍然会失败):
startup.ConfigureServices(serviceCollection);
var provider = serviceCollection.BuildServiceProvider();
foreach (var serviceDescriptor in serviceCollection)
{
provider.GetService(serviceDescriptor.ServiceType);
}
【问题讨论】:
-
我怀疑答案是,如果您需要这样的功能来使用具有它的第 3 方 DI 容器。或者,您可以查看具有它的 DI 容器的源代码,并构建您自己的
Microsoft.DependencyInjection扩展来提供它。 -
“在以前的项目中我使用过简单的注射器”。为什么不再使用 Simple Injector?它似乎优雅地解决了您的问题。
-
@Steven 真的!由于这是一个新项目,我正在尝试尽可能多地使用内置功能,但如果事实证明在框架中没有进行此验证的好方法,则使用 Simple Injector 可能是解决方案。
-
您找到了一个好的解决方案吗?我刚刚发布了同样的问题
-
@mcintyre321 终于在 aspnetcore 3 中得到了它stackoverflow.com/a/60374778/5112433
标签: c# asp.net-core dependency-injection