如何让ASP.NET Core DI在注入错误ILogger时触发崩溃?
Logger依赖注入类型不匹配的测试异常问题
问题背景
我不小心在KeyCodeHandler的构造函数中注入了类型不匹配的Logger:
public KeyCodeHandler(ILogger logger)
这段代码无法正确解析依赖,因为正确的注入类型应该是ILogger<KeyCodeHandler>。虽然这个问题本身容易修复,但我希望编写自动化测试来提前检测这类依赖注入错误。
测试代码实现
我编写了如下测试用例来验证所有服务的依赖是否正常:
[Fact] public void AllDependenciesPresentAndAccountedFor() { var builder = ProgramHelper.CreateBuilder(Array.Empty<string>()); var mock = new Mock<IHostEnvironment>(); mock.Setup(x => x.EnvironmentName).Returns(Environments.Development); builder.Services.AddSingleton(mock.Object); var services = builder.Services; var data = new List<string>(); var exceptions = new List<InvalidOperationException>(); var provider = services.BuildServiceProvider(); foreach (var serviceDescriptor in services) { var serviceType = serviceDescriptor.ServiceType; if (!serviceType.Assembly.GetName().Name!.Contains("InterfaceService")) { continue; } data.Add(serviceType.Name); try { provider.GetServices(serviceType); } catch (InvalidOperationException e) { exceptions.Add(e); } } exceptions.Should().BeEmpty(); }
异常现象
现在遇到了一个令人困惑的情况:
- 在Rider调试模式下运行该测试,能够捕获到
ILogger类型不匹配的异常,测试按预期失败 - 但切换到非调试模式运行测试时,测试直接通过,完全检测不到这个错误
- 除此之外,非调试模式下启动ASP.NET Core服务时,服务也能正常启动,完全忽略了这个依赖注入错误
- 我尝试手动将环境设置为Development模式,但并没有解决问题
内容的提问来源于stack exchange,提问作者Christian Sauer
相关产品推荐
相关产品推荐

