You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 14:40:15