正确实施NLog和Prism

时间:2010-05-14 09:51:41

标签: c# wpf prism nlog prism-2

在我的Prism / CAL WPF应用程序中实现NLog的最佳方法是什么。这可能是一个业余问题,我对整个Prism框架有点新鲜:)

我考虑过在Infrastructure模块中引用NLog dll并创建一个包装器单例类,例如MyLogger。我的想法是能够在所有参考的中心位置引用1个记录器实现,而我在Prism中唯一知道的就是你的Infrastructure模块。

显而易见的另一种方法是向每个模块添加对NLog的引用,但我认为这会破坏解耦的目的和所有这些。

任何想法都会非常有用

此致

1 个答案:

答案 0 :(得分:4)

我会推荐类似于你的第一个想法的东西,尽管它利用了Prism中现有的界面。

虽然我不确定NLog中可用的确切方法签名,但您可能需要考虑使用Prism的ILoggerFacade接口,该接口通常在您的Bootstrapper中定义(请参阅StockTraderRI应用程序如何设置的一个例子)。通常情况下,这可以作为Microsoft's Composite Logging interface的传递,但没有理由不使用它来挂钩您自己的记录器。

考虑这种方法的几个原因:

  1. 它使用Prism框架中已有的ILoggerFacade接口,其他开发人员将熟悉它
  2. 如果您以后决定转到其他日志框架,则只需替换ILoggerFacade实现背后的对象
  3. 另一种方法是按照您的建议执行:创建一个接口,在您的基础架构DLL中定义NLog服务(或公开现有的NLog接口),并在您的引导程序中注册该服务的实现。然后,您可以使用依赖注入容器来获取模块中记录器服务的引用。但请注意,这实际上只是再现了ILoggerFacade界面已经为您提供的内容。