从 nuget 库中正确记录

Proper logging from a nuget library

我正在开发一个可从 WPF 应用程序和 UWP 应用程序使用的 nuget 库,我想使用 Microsoft.Extensions.Logging.Abstractions 为用户提供一种从他们的应用程序中插入他们选择的记录器的方法(Serilog 、NLog 等。)。因此我从这个开始:

public static partial class FrameworkElementExtensions
{
    internal static ILogger _logger;

    public static void AttachLogger(ILogger logger) => _logger = logger;
.
.
.
}

在这种情况下,我需要将日志记录添加到基于FrameworkElement 的扩展方法中。我觉得我正在以错误的方式解决这个问题,因为我有一个名为 AttachLogger 的函数来注入记录器,而且我的 ILogger 与类型无关(例如:ILogger<T>)因为我处于静态 class.

有人能指出我正确的方向吗?谢谢!

除了使用专用方法(在您的情况下为 AttachLogger)之外,我没有看到更好的方法来 "inject" 依赖静态 class 和 Microsoft.Extensions.Logging.Abstractions

关于通用 Logger<T>,您可以注入 ILoggerFactory 并创建与您的 class

关联的记录器
public static void AttachLogger(ILoggerFactory loggerFactory)
{
    _logger = loggerFactory.CreateLogger(nameof(FrameworkElementExtensions));
}