C# 如何在console应用程序中配置ConsoleLogger?
我正在尝试使用.NET CORE 3.1构建一个控制台应用程序,但在注入控制台记录器时遇到问题 在最近的版本中,日志记录的注入方式似乎发生了显著的变化,各种风格的教学教程似乎都不符合我的意图 我有一个界面:C# 如何在console应用程序中配置ConsoleLogger?,c#,asp.net-core,.net-core,C#,Asp.net Core,.net Core,我正在尝试使用.NET CORE 3.1构建一个控制台应用程序,但在注入控制台记录器时遇到问题 在最近的版本中,日志记录的注入方式似乎发生了显著的变化,各种风格的教学教程似乎都不符合我的意图 我有一个界面: public interface IMyDoer { void DoSomething(); } 我想在其中注入一个ILogger的类: public class MyDoer : IMyDoer { private readonly ILogger logger;
public interface IMyDoer
{
void DoSomething();
}
我想在其中注入一个ILogger的类:
public class MyDoer : IMyDoer
{
private readonly ILogger logger;
public MyDoer(ILogger logger)
{
this.logger = logger;
}
public void DoSomething()
{
this.logger.Log(LogLevel.Information, "Doing something");
}
}
然后是Main(),在这里我试图配置DI容器来构造Doer对象,配置ILogger来登录控制台
public class Program
{
public static void Main(string[] args)
{
var serviceCollection = new ServiceCollection();
ConfigureServices(serviceCollection);
var serviceProvider serviceCollection.BuildServiceProvider();
var myDoer = serviceProvider.GetService<IMyDoer>();
myDoer.DoSomething();
}
private static void ConfigureServices(ServiceCollection serviceCollection)
{
serviceCollection.AddLogging(configure => {
configure.AddConsole();
});
serviceCollection.AddSingleton<IMyDoer, MyDoer>();
}
}
关于我应该如何做这件事有什么想法吗?
ILogger
未在ASP.NET Core DI容器中注册。请改用ILogger
:
public class Program
{
static void Main(string[] args)
{
var serviceCollection = new ServiceCollection();
ConfigureServices(serviceCollection);
using (var serviceProvider = serviceCollection.BuildServiceProvider())
using (var loggerFactory = LoggerFactory.Create(builder => builder.AddConsole()))
{
var myDoer = serviceProvider.GetService<IMyDoer>();
myDoer.DoSomething();
}
}
private static void ConfigureServices(ServiceCollection serviceCollection)
{
serviceCollection
.AddSingleton<IMyDoer, MyDoer>();
}
}
System.InvalidOperationException
HResult=0x80131509
Message=Unable to resolve service for type 'Microsoft.Extensions.Logging.ILogger' while attempting to activate 'MyDoer.DoSomething'.
Source=Microsoft.Extensions.DependencyInjection
public class MyDoer : IMyDoer
{
private readonly ILogger<MyDoer> logger;
public MyDoer(ILogger<MyDoer> logger)
{
this.logger = logger;
}
// ...
}
public class MyDoer : IMyDoer
{
private readonly ILogger logger;
public MyDoer(ILoggerFactory loggerFactory)
{
this.logger = loggerFactory.CreateLogger("YourCategory");
}
// ...
}