我正在使用 Autofac 作为我的 IoC,并且从我读过的关于 DI 主题的所有内容中都可以看出如何使用“构造函数注入”来显式公开类依赖项......但是,我也在使用 Log4Net 的日志外观(Common.Logging)并创建了Autofac 模块来注入它。现在,在我想做一些日志记录的每个类中,我都有额外的构造函数参数(参见示例 #1)....
我想知道在使用日志记录外观时是否需要记录 DI?我知道通过构造函数签名显式暴露依赖项是一个很好的架构。 但在记录外观的情况下,我相信以下是正确的:
- 我仍然可以随时“换掉”日志框架
- 恕我直言,该类并不真正依赖于 Logger。如果未配置日志记录,则使用 NullLogger。这几乎是“如果你需要它就可以”与“除非你提供它否则它将无法工作”的交易......(参见示例#2)
那么,其他人怎么看?注入日志外观是不是矫枉过正?关于这个主题有一些类似的问题,但更笼统地说(基础设施) - 我主要对日志记录感兴趣......
// IoC "way"
public class MyController : BaseController
{
private readonly ILog _logger;
public MyController(ILog logger)
{
_logger = logger;
}
public IList<Customers> Get()
{
_logger.Debug("I am injected via constructor using some IoC!");
}
}
// just use the logger "way"
public class MyController : BaseController
{
private static readonly ILog Logger = LogManager.GetCurrentClassLogger();
public IList<Customers> Get()
{
Logger.Debug("Done! I can use it!");
}
}