Prism Unity 将 NLog 注册为 Microsoft.Extension.Logging.ILogger<T>

问题描述 投票:0回答:1

我的后端和前端(WPF)之间有一个共享代码,其中后端当前使用与 Microsoft.Extensions.Logging.ILogger 兼容的 NReco.Logging.File。 但在前端,我使用NLog。 现在,每次使用构造函数请求 ILogger 时,我想提供一个 NLog.Logger。 因此我需要找到一个解决方案来相应地设置 Prism.DI。

目前我找到了NLog.Extension.Hosting和NLog.Extensions.Logging,它们将NLog注册为Microsoft.Extension.Hosting。 https://github.com/NLog/NLog.Extensions.Logging/tree/master 此外,我还发现了以下条目,用于将 Serilog 注册为 ILog 提供程序: 使用 Unity 解决通用 Microsoft.Extensions.Logging.ILogger - 获取 InvalidCastException

有没有办法将NLog注册到Prism Unity以提供为Microsoft.Extension.Logging.ILogger。

wpf prism unity-container nlog
1个回答
0
投票

再次检查另一个问题的完整答案后,我可以通过以下方式解决问题。

public static IContainerRegistry AddLogger(this IContainerRegistry services)
{
    var loggerFactory = new NLogLoggerFactory();
    var provider = new NLogLoggerProvider();
    loggerFactory.AddProvider(provider);
    services.RegisterInstance<ILoggerFactory>(loggerFactory);
    services.Register(typeof(ILogger<>), typeof(Logger<>));
    return services;
}

所以现在,所有针对 ILogger 的请求都通过 NLogger 解决。

    <PackageReference Include="NLog.Extensions.Logging" Version="5.3.3"/>
© www.soinside.com 2019 - 2024. All rights reserved.