正确实施NLog和Prism

Wil*_*mar 6 c# wpf prism nlog prism-2

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

我想过把参考NLOG DLL中的基础设施模块中,并进行包装单例类如MyLogger.我的想法是能够在一个所有人都参考的中心位置引用1个记录器实现,而我在Prism中唯一知道的就是你的Infrastructure模块.

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

任何想法都会有所帮助

问候

Mat*_*dan 5

我会推荐类似于您的第一个想法的东西,尽管它利用了 Prism 中已经存在的界面。

虽然我不确定 NLog 中提供给您的确切方法签名,但您可能需要考虑使用 Prism 的ILoggerFacade接口,该接口通常在您的 Bootstrapper 中定义(有关如何设置的示例,请参阅StockTraderRI应用程序)。通常,这充当到Microsoft 的 Composite Logging interface的传递,但是没有理由不能使用它来连接到您自己的记录器。

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

  1. 它使用了 Prism 框架中已经存在的 ILoggerFacade 接口,其他开发人员会很熟悉
  2. 如果您稍后决定使用不同的日志记录框架,则只需替换 ILoggerFacade 实现背后的对象

另一种方法是按照您的建议进行操作:在基础结构 DLL 中创建一个定义 NLog 服务的接口(或公开现有的 NLog 接口),并在引导程序中注册该服务的实现。然后,您可以使用依赖项注入容器来获取对模块中记录器服务的引用。但是请注意,这实际上只是重现了 ILoggerFacade 界面已经提供给您的内容。