Mar*_*ich 22 c# dependency-injection asp.net-core
在我的Startup课程中,我使用该ConfigureServices(IServiceCollection services)方法设置我的服务容器,使用内置的DI容器Microsoft.Extensions.DependencyInjection.
我想在单元测试中验证依赖图,以检查是否可以构造所有服务,以便我可以修复在单元测试期间丢失的任何服务,而不是让应用程序在运行时崩溃.在之前的项目中,我使用了Simple Injector,它有一个.Verify()容器的方法.但我无法找到任何与ASP.NET Core类似的东西.
是否有任何内置(或至少推荐)的方法来验证是否可以构建整个依赖图?
(我能想到的最愚蠢的方式就是这样,但由于框架本身注入了开放的泛型,它仍然会失败):
startup.ConfigureServices(serviceCollection);
var provider = serviceCollection.BuildServiceProvider();
foreach (var serviceDescriptor in serviceCollection)
{
provider.GetService(serviceDescriptor.ServiceType);
}
Run Code Online (Sandbox Code Playgroud)
Ily*_*kov 15
ASP.NET Core 3 中添加了内置的 DI 容器验证Development,默认情况下仅在环境中启用。如果缺少某些东西,容器在启动时会抛出一个致命的异常。
请记住,默认情况下控制器不会在 DI 容器中创建,因此在控制器在 DI 中注册之前,典型的 Web 应用程序不会从该检查中获得太多信息:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers()
.AddControllersAsServices();
}
Run Code Online (Sandbox Code Playgroud)
要禁用/自定义验证,请添加一个IHostBuilder.UseDefaultServiceProvider调用:
public class Program
{
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
//...
.UseDefaultServiceProvider((context, options) =>
{
options.ValidateOnBuild = false;
});
Run Code Online (Sandbox Code Playgroud)
此验证功能有几个限制,请在此处阅读更多信息:https : //andrewlock.net/new-in-asp-net-core-3-service-provider-validation/
| 归档时间: |
|
| 查看次数: |
2203 次 |
| 最近记录: |