C# 在没有DI的情况下登录.NETCore?

C# 在没有DI的情况下登录.NETCore?,c#,logging,asp.net-core,C#,Logging,Asp.net Core,微软似乎真的想用.NET内核把DI塞进你的喉咙里,我不知道为什么,但坦率地说,我的控制台应用程序又小又简单,我只是不想为了做一些简单的日志而构建一个完整的DI容器。如何在不使用DI的情况下登录.NETCore?我读到的所有内容都假设您将使用.NET Core的内置日志体系结构,这显然需要DI,但必须有一种方法可以在不使用DI的情况下在类上使用静态变量来完成此操作?如果您想自己完成此操作,您需要在某处实例化一个实例并配置所需的提供程序。然后,您只需调用创建实例或使用新建记录器(iLogger工厂)

微软似乎真的想用.NET内核把DI塞进你的喉咙里,我不知道为什么,但坦率地说,我的控制台应用程序又小又简单,我只是不想为了做一些简单的日志而构建一个完整的DI容器。如何在不使用DI的情况下登录.NETCore?我读到的所有内容都假设您将使用.NET Core的内置日志体系结构,这显然需要DI,但必须有一种方法可以在不使用DI的情况下在类上使用静态变量来完成此操作?

如果您想自己完成此操作,您需要在某处实例化一个实例并配置所需的提供程序。然后,您只需调用创建实例或使用
新建记录器(iLogger工厂)
创建记录器

using Microsoft.Extensions.Logging;

static class MyLogger {

    public static ILoggerFactory LoggerFactory {get;}

    static MyLogger() {
        LoggerFactory = new LoggerFactory();
        LoggerFactory.AddConsole();
    }
}

public MyClass {
    private readonly ILogger _logger = new Logger<MyClass>(MyLogger.LoggerFactory);
}
使用Microsoft.Extensions.Logging;
静态类MyLogger{
公共静态工厂日志工厂{get;}
静态MyLogger(){
LoggerFactory=新的LoggerFactory();
LoggerFactory.AddConsole();
}
}
公共MyClass{
私有只读ILogger\u logger=新的记录器(MyLogger.LoggerFactory);
}

我最终使用的是NLog,而不是使用它们的.NET Core DI扩展,我只是包括了,手动创建了自己的
NLog.config
文件,然后按照to
GetCurrentClassLogger()
创建了一个类的静态成员,然后直接将其用于日志记录。这是一个非常简单的设置,不需要DI。NLog可能应该更好地记录它。

我自己喜欢他们的Windows事件跟踪(ETW)库,它不需要DI。Simple Injector作者写了一篇完整的博客文章,阐述了为什么这样做是错误的。所以这是一个很好的问题,为什么微软用一切来推动DI,而不是让一切都对DI友好,因此,任何容器都可以使用。像这样的书现在在最新的.Net内核中已经过时,取而代之的是ILoggingBuilder扩展,它实际上再次与DI硬耦合……相关链接:我已经专业地使用NLog 6年了。它的可靠性和易用性令人惊讶。