Serilog 与 Prism 8 一起使用并注入 Microsoft.Extensions.Logging.ILogger

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

在 Unity 中使用 .Net 5 WPF、Serilog 和 PrismLibrary 8 有人可以指导我正确的方向,以便我可以将 Microsoft.Extensions.Logging.ILogger 注入 ViewModels 等。 我找到了很多片段,但在某些方面都失败了。 我更喜欢使用 Microsoft.Extensions.Logging.ILogger 来获得日志记录提供程序的灵活性。

prism unity-container serilog ilogger
2个回答
0
投票

我也在寻找某种例子。但我相信他们中的大多数人都使用 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!");

   //...
}

这对我有用,希望有帮助!


0
投票

我在 Prism 8 中使用 DryIoc 解决这个问题的方法是添加对 Serilog.Extensions.Logging 的引用

然后,您可以创建一个 Microsoft 记录器,您的视图模型可以将其与 SerilogLoggerFactory 一起使用。因此,创建您的记录器,而不是将其传递给工厂,然后在容器注册表中注册工厂的输出。

var microsoftLogger = new SerilogLoggerFactory(Log.Logger).CreateLogger("Main");
        containerRegistry.Register<Microsoft.Extensions.Logging.ILogger>(() => microsoftLogger);
© www.soinside.com 2019 - 2024. All rights reserved.