我很难理解在通用库中使用 Microsoft.Extensions.Logging 的最佳方法是什么。
使用 NLog,您可以执行以下操作:
public class MyClass
{
private static readonly NLog.Logger Logger = NLog.LogManager.GetCurrentClassLogger();
public void foo()
{
Logger.Info("foo");
}
}
Run Code Online (Sandbox Code Playgroud)
你完成了!您让客户端配置其目标,但这不再是您的问题。
但是使用 Microsoft.Extensions.Logging 代码看起来更像:
public class MyClass
{
private readonly Ilogger Logger;
public MyClass(ILogger<MyClass> logger)
{
Logger = logger;
}
public void foo()
{
Logger.LogInformation("foo");
}
}
Run Code Online (Sandbox Code Playgroud)
所以现在我需要在 ctor 上传递一个 ILogger。
好吧没问题我可以从 ILoggerFactory 得到一个。
现在我需要一个 ILoggerFactory。
这听起来是错误的,因为在库代码中创建 LoggerFactory 需要引用 Microsoft.Extensions.Logging 而你应该只引用 Microsoft.Extensions.Logging.Abstractions。这是代码异味的线索。
当您在 ASP.Net Core 应用程序或服务中但想要一个可以在控制台应用程序或 WinForm/WPF 应用程序中使用的通用库时,构造函数中的依赖注入看起来不错?
那么现在客户端现在需要传递一个 …