【问题标题】:'Unable to resolve service for type 'Microsoft.Extensions.Logging.ILogger`1[Application.Startup]' while attempting to activate 'Application.Startup'.'“尝试激活“Application.Startup”时,无法解析“Microsoft.Extensions.Logging.ILogger`1[Application.Startup]”类型的服务。”
【发布时间】:2020-03-21 20:51:59
【问题描述】:

我有一个 ASP.NET Core 3.0 应用程序。我收到错误

“尝试激活“Application.Startup”时,无法解析“Microsoft.Extensions.Logging.ILogger`1[Application.Startup]”类型的服务。”

我知道 ILogger 没有在 ASP.NET Core 3.0 应用程序中默认注册。下面是我的 Program.cs 和 Startup.cs 代码供参考

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureLogging(logging =>
          {
            logging.ClearProviders();
            logging.SetMinimumLevel(LogLevel.Trace);
          })
        .ConfigureWebHostDefaults(webBuilder =>
        {
          webBuilder.UseStartup<Startup>();
        });

Startup.cs

public void ConfigureServices(IServiceCollection services)
    {
        var serviceProvider = services.BuildServiceProvider();
        var logger = serviceProvider.GetService<ILogger<AnyClass>>();
        services.AddSingleton(typeof(ILogger), logger);
        ...
     }

请谁能帮我解决这个错误,我做错了什么?

【问题讨论】:

  • 这能回答你的问题吗? How do I write logs from within Startup.cs
  • 否 如链接中所说的 ASP.NET 3.0 跟随但仍然相同的错误
  • 该问题的部分答案是关于 ASP.NET Core 3.0
  • 你为什么要解析记录器只是为了将其注册为单例?
  • 清空您的 ConfigureServices 中的所有代码

标签: c# asp.net-core


【解决方案1】:

根据https://docs.microsoft.com/en-us/aspnet/core/fundamentals/logging/?view=aspnetcore-3.1#create-logs-in-the-startup-class,不支持在 Startup.ConfigureServices 方法中完成 DI 容器设置之前写入日志。

你不能做var logger = serviceProvider.GetService&lt;ILogger&lt;AnyClass&gt;&gt;();,因为在那个阶段还没有配置 DI 容器。

有关所提供链接的更多信息。

【讨论】:

  • 我也尝试评论这些行,但在我调试时它仍然在 Line HostBuilder.Build().Run() 上引发错误
  • 您通过这样做logging.ClearProviders(); 清除了所有提供程序,并且没有添加任何返回。尝试添加logging.AddConsole(); 看看效果如何。对于此扩展方法,您可能需要此 nuget 包 nuget.org/packages/Microsoft.Extensions.Logging.Console
  • ILoggingBuilder 不包含 AddConsole() 的定义,其中 logging 是 ILoggingBuilder
  • AddConsole() 在我添加时可用 .ConfigureLogging 但仍然存在错误 在这种情况下 var logger = serviceProvider.GetService>();被评论了
猜你喜欢
  • 2018-04-06
  • 2021-12-16
  • 1970-01-01
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
  • 2018-03-23
  • 1970-01-01
相关资源
最近更新 更多