根据
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/logging,使用Microsoft.Extensions.Logging的建议方法似乎是通过依赖注入ILogger对象.
在依赖注入不起作用(或不能正常工作)的情况下建议的模式是什么,例如在扩展方法,类型初始值设定项,静态属性和其他静态成员中,传递ILogger会非常麻烦?
使用log4net(我的团队之前使用过),一个常见的模式是:
public static class SomeExtensions { private static readonly ILog s_log = LogManager.GetLogger(typeof(SomeExtensions)); public static void ExtensionMethod (this SomeType someType) { s_log.Info("..."); } }
Microsoft.Extensions.Logging是否有类似的既定或推荐模式?
DI对于静力学并不好玩.从某种意义上说,它们是一种对立的设计哲学. ASP.NET大量使用静态(HttpContext,任何人?),并且在很多方面使用依赖注入非常困难. ASP.NET Core选择避开静态并使用100%DI模型.
原文链接:https://www.f2er.com/windows/365238.html简而言之,如果你想使用依赖注入,你的静态使用应该消失.在大多数情况下,这实际上是一件非常好的事情.虽然它们可以用于某些事情,但在大多数情况下都会被滥用.你可以用静态做很多事情,你不能用单例范围内的依赖注入类来做,后者为你提供了更大的抽象和可重用性.
无法真正替换的静态的一种用法是扩展.当然,有一整套思想认为你不应该使用扩展,无论如何.但是,如果您需要或想要扩展,那么您要么无法从这些扩展,要么您必须将logger实例作为参数传递.在许多情况下,必须传入记录器会严重限制扩展的有用性,因此您可能会完全没有登录.然而,即使你是学校认为扩展是好的和花花公子,大多数人会同意他们也应该在范围有限:即他们应该做一些简单的事情,不需要很多代码.如果是这种情况,实际登录的需求会急剧减少.
简而言之,它简单归结为您必须做出的设计决策.如果你想要依赖注射路线,静力学将是你家的瘟疫,你应该避免它们.