如何在ASP.NET Core中validationDI容器?

在我的Startup类中,我使用ConfigureServices(IServiceCollection services)方法来设置我的服务容器,使用来自Microsoft.Extensions.DependencyInjection的内置DI容器。

我想在unit testing中validation依赖图,以检查是否可以构造所有服务,这样我就可以修复在unit testing期间丢失的任何服务,而不是让应用程序在运行时崩溃。 在以前的项目中,我使用了Simple Injector,它对容器有一个.Verify()方法。 但是我无法找到类似ASP.NET Core的东西。

是否有任何内置(或至少推荐)的方法来validation是否可以构建整个依赖图?

(我能想到的最愚蠢的方式就是这样,但由于框架本身注入的开放式generics,它仍然会失败):

 startup.ConfigureServices(serviceCollection); var provider = serviceCollection.BuildServiceProvider(); foreach (var serviceDescriptor in serviceCollection) { provider.GetService(serviceDescriptor.ServiceType); } 

要确保ASP.NET Core应用程序按预期工作并且所有依赖项都是正确注入的,您应该在ASP.NET Core中使用Integration测试 。 这样您就可以使用相同的Startup类初始化TestServer ,因此它会导致所有依赖项被注入(没有模拟或类似的存根),并使用公开的路由/ URL /路径测试您的应用程序。

默认根URL的集成测试可能如下所示:

 public class PrimeWebDefaultRequestShould { private readonly TestServer _server; private readonly HttpClient _client; public PrimeWebDefaultRequestShould() { // Arrange _server = new TestServer(new WebHostBuilder().UseStartup()); _client = _server.CreateClient(); } [Fact] public async Task ReturnHelloWorld() { // Act var response = await _client.GetAsync("/"); response.EnsureSuccessStatusCode(); var responseString = await response.Content.ReadAsStringAsync(); // Assert Assert.Equal("Hello World!", responseString); } }