gpt4 book ai didi

asp.net-mvc - Ninject.Extensions.Logging.nlog2 - 如何?

转载 作者:行者123 更新时间:2023-12-01 19:54:27 25 4
gpt4 key购买 nike

浏览nuget库,我发现了Ninject.Extensions.Logging.nlog2 。一些谷歌搜索并试图找出答案,我似乎找不到你如何或为什么使用这个扩展。

建议与 MVC 3 一起使用吗?

重点是什么?

如何使用它?

最佳答案

这真的非常简单; NLog 和 log4net 都希望您使用单例/静态引用来获取记录器实例:

private static Logger logger = LogManager.GetCurrentClassLogger();

这被广泛认为是一种反模式,但即使您对此没有任何问题,如果您尝试实现依赖注入(inject),它仍然违反常规。就 NLog 而言,它甚至不是像 log4net 这样的 ILogILogger 接口(interface),它是一个实际的类。这带来了某些缺点,例如无法创建代理、延迟加载、缓存等。

Ninject.Extensions.Logging 项目首先提供一个抽象的 ILogger 类,其中包含简单的方法,如 InfoError 等。 ,因此您可以将其作为依赖项注入(inject),并根据需要切换日志框架:

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,那么这是将您的代码与任何特定日志记录库分离的好方法。

关于asp.net-mvc - Ninject.Extensions.Logging.nlog2 - 如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7087091/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com