浏览nuget图书馆,我遇到了
Ninject.Extensions.Logging.nlog2.一些搜索和试图弄清楚,我似乎找不到如何或为什么你会使用这个扩展名.
建议使用MVC 3吗?
究竟是什么点?
你如何使用它?
解决方法
真的很简单NLog和log4net都希望您使用单例/静态引用来获取记录器实例:
private static Logger logger = LogManager.GetCurrentClassLogger();
这被广泛认为是一种反模式,但即使你没有问题,如果你想实现依赖注入,它仍然会反对谷物.在NLog的情况下,它不是一个ILog或ILogger接口,如log4net,它是一个实际的类.这具有某些缺点,例如无法创建代理,延迟加载,缓存等.
Ninject.Extensions.Logging项目所做的是首先使用诸如Info,Error等简单方法提供一个抽象的ILogger类,因此您可以将其注入为依赖关系,并根据需要切换日志框架:
public class WidgetProvider { private readonly ILogger log; public WidgetProvider(ILogger log) { this.log = log; } }
这是DI应该是如何工作的 – 一个类永远不会出来抓取自己的依赖关系,而是由构造函数或调用者提供如上.假设您已将Ninject自身集成到您的项目中,那么这就是您所需要做的一切,没有额外的工作.
至于Ninject.Extensions.Logging.NLog2是否具体实现 – 它仅提供基于NLog2的Ninject.Extensions.Logging的实现.基本记录库实际上并不包含ILogger的任何实现,您必须插入其中一个特定库(NLog,NLog2或log4net)才能使其运行.
如果您切换您的DI库更频繁地切换记录器,那么不要打扰它.但是,如果你像我一样在几乎每个项目中使用Ninject,那么这是一个很好的方式来将代码与任何特定的日志库分离开来.