在 Unity 中使用 .Net 5 WPF、Serilog 和 PrismLibrary 8 有人可以指导我正确的方向,以便我可以将 Microsoft.Extensions.Logging.ILogger 注入 ViewModels 等。 我找到了很多片段,但在某些方面都失败了。 我更喜欢使用 Microsoft.Extensions.Logging.ILogger 来获得日志记录提供程序的灵活性。
我也在寻找某种例子。但我相信他们中的大多数人都使用 ILoggerFacade,并且他们从 Prism 8 中删除了它。目前我正在使用 MAUI,它可能与 WPF 类似。我关注了这个视频 https://www.youtube.com/watch?v=WcmnH72kf0 但我做了一些更改以使其与 Prism 一起使用。
您需要添加 nuget 扩展:Prism.Container.Extensions
然后在您的 PrismStartup 或任何有 RegisterTypes 的地方添加以下代码(基于 Gerald 的视频):
containerRegistry.RegisterServices(services =>
{
services.AddLogging(loggingBuilder => loggingBuilder.AddTraceLogger(_ => { }));
});
无论您想在哪里登录,添加:
using Microsoft.Extensions.Logging;
public class IWantToLogHereClass
{
private readonly ILogger<IWantToLogHereClass> _logger;
public IWantToLogHereClass(ILogger<IWantToLogHereClass> logger)
{
_logger = logger;
}
//...
//whatever place you want to log
_logger.LogInformation("HELLO WORLD!");
//...
}
这对我有用,希望有帮助!
我在 Prism 8 中使用 DryIoc 解决这个问题的方法是添加对 Serilog.Extensions.Logging 的引用
然后,您可以创建一个 Microsoft 记录器,您的视图模型可以将其与 SerilogLoggerFactory 一起使用。因此,创建您的记录器,而不是将其传递给工厂,然后在容器注册表中注册工厂的输出。
var microsoftLogger = new SerilogLoggerFactory(Log.Logger).CreateLogger("Main");
containerRegistry.Register<Microsoft.Extensions.Logging.ILogger>(() => microsoftLogger);