没有注册类型'Microsoft.Extensions.Logging.ILoggingBuilder'的服务 [英] No service for type 'Microsoft.Extensions.Logging.ILoggingBuilder' has been registered
问题描述
我正在使用.NET core 2.2构建全新的Web API。在我的 Startup.cs
中,在configure方法中设置了 ILoggerFactory
。当我做这样的事情并添加以下代码时
I am building brand new Web APIs with .NET core 2.2. In my Startup.cs
I have set ILoggerFactory
in configure method. When I do such a thing and add following code
loggerFactory.AddConsole();
loggerFactory.AddDebug();
我得到的信息是此方法已过时,它将在以后的版本中删除,我应该使用 ILoggingBuilder
。没问题,我已经用这种新的日志记录方法替换了,一旦启动Web API,我就会报错
I get information saying that this method is obsolete and it will be removed in future versions, instead I should use ILoggingBuilder
.No problem, I have replaced with this new logging method and as soon as I start Web APIs I get error
InvalidOperationException:没有注册类型为'Microsoft.Extensions.Logging.ILoggingBuilder'的服务。
InvalidOperationException: No service for type 'Microsoft.Extensions.Logging.ILoggingBuilder' has been registered.
,我的输出窗口显示此
无法解析参数'Microsoft.Extensions.Logging.ILoggingBuilder'类型的服务
Could not resolve a service of type 'Microsoft.Extensions.Logging.ILoggingBuilder' for the parameter 'loggingBuilder' of method.
.NET核心是我的新手,但是我在这里缺少什么吗?使用ILoggerFactury,我不必注册任何服务,日志记录就可以正常工作。 此处是Microsoft的文档并不是很有帮助。
I am new to .NET core, but am I missing something here? With ILoggerFactury, I did not have to register any services and logging would work just fine. Microsoft's documentation here is not really helpful.
Startup.cs看起来像这样:
Startup.cs looks like this:
public class Startup
{
// This method gets called by the runtime. Use this method to add services to the container.
// For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggingBuilder loggingBuilder)
{
loggingBuilder.AddConsole();
loggingBuilder.AddDebug();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler();
}
app.UseMvc();
//app.Run(async (context) =>
//{
// await context.Response.WriteAsync("Hello World!");
//});
}
}
Program.cs看起来像这样:
Program.cs looks like this:
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>();
}
推荐答案
它不起作用,因为您不要在依赖项注入容器中注册日志记录组件。有两种方法可以执行此操作:
It's not working because you're not registering the logging components with your dependency injection container. There are two ways you can do this:
可以将其配置为 CreateWebHostBuilder
的一部分:
Either configure it as part of the CreateWebHostBuilder
:
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureLogging((hostingContext, logging) =>
{
logging.AddConsole();
logging.AddDebug();
})
.UseStartup<Startup>();
或者,也可以在 ConfigureServices $下将其注册到服务集合中c $ c>:
services.AddLogging(logging =>
{
logging.AddConsole();
logging.AddDebug();
});
这篇关于没有注册类型'Microsoft.Extensions.Logging.ILoggingBuilder'的服务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!