在我的Prism / CAL WPF应用程序中实现NLog的最佳方法是什么。这可能是一个业余问题,我对整个Prism框架有点新鲜:)
我考虑过在Infrastructure模块中引用NLog dll并创建一个包装器单例类,例如MyLogger。我的想法是能够在所有参考的中心位置引用1个记录器实现,而我在Prism中唯一知道的就是你的Infrastructure模块。
显而易见的另一种方法是向每个模块添加对NLog的引用,但我认为这会破坏解耦的目的和所有这些。
任何想法都会非常有用
此致
答案 0 :(得分:4)
我会推荐类似于你的第一个想法的东西,尽管它利用了Prism中现有的界面。
虽然我不确定NLog中可用的确切方法签名,但您可能需要考虑使用Prism的ILoggerFacade接口,该接口通常在您的Bootstrapper中定义(请参阅StockTraderRI应用程序如何设置的一个例子)。通常情况下,这可以作为Microsoft's Composite Logging interface的传递,但没有理由不使用它来挂钩您自己的记录器。
考虑这种方法的几个原因:
另一种方法是按照您的建议执行:创建一个接口,在您的基础架构DLL中定义NLog服务(或公开现有的NLog接口),并在您的引导程序中注册该服务的实现。然后,您可以使用依赖注入容器来获取模块中记录器服务的引用。但请注意,这实际上只是再现了ILoggerFacade界面已经为您提供的内容。