如何在 .NET 6 类库中初始化 ILogger?

M Λ*_*I K 6 c# .net-6.0

我有一个类库,由控制台应用程序使用。ILogger<T>我现在想在我的类库中添加通过构造函数注入。我想出了这样的事情:

public class Class1
{
    private readonly ILogger<Class1> _logger;

    public Class1(ILogger<Class1> logger)
    {
        _logger = logger;
    }
}
Run Code Online (Sandbox Code Playgroud)

但我不知道如何才能交出ILogger<T>

public class Program
{
    public static void Main(string[] args)
    {
        Class1 clazz = new Class1(?????);
    }
}
Run Code Online (Sandbox Code Playgroud)

D-S*_*hih 6

我们可以尝试使用ServiceCollection可以从Microsoft.Extensions.DependencyInjection恢复的

ServiceCollection可以将Class1类注册到 DI 容器,并且ILogger<Class1>如果我们正确注册我们的类,可能会自动注入。

var services = new ServiceCollection();
services.AddLogging(configure => configure.AddConsole());
services.AddTransient<Class1>();
ServiceProvider serviceProvider = services.BuildServiceProvider();
Class1 clazz = serviceProvider.GetRequiredService<Class1>();
Run Code Online (Sandbox Code Playgroud)

时间:2019-03-17 标签:c#online

我建议使用Microsoft.Extensions.Logging来实现我们的日志机制,该机制提供 Microsoft 的基础结构默认实现。

此外,很多流行的开源日志项目都会支持和扩展,Microsoft.Extensions.Logging例如Serilog.Extensions.LoggingNLog.Extensions.Logging ...

这样我们就可以轻松地更改不同的记录器架构(如果该架构可扩展)Microsoft.Extensions.Logging

services.AddLogging(configure => configure.AddNLog());
services.AddLogging(configure => configure.AddSerilog());
Run Code Online (Sandbox Code Playgroud)