【发布时间】:2012-09-17 12:02:58
【问题描述】:
我使用 Autofac 作为我的 IoC,并且从我读过的关于 DI 主题的所有内容中,我教会了使用“构造函数注入”来显式公开类依赖项...... 但是,我也在使用 Log4Net 的日志外观(Common.Logging),并创建了 Autofac 模块来注入它。 现在,在我想要进行一些日志记录的每个类中,我都有额外的构造函数参数(参见示例 #1)......
我想知道在使用日志记录外观时是否需要记录 DI? 我知道通过构造函数签名显式暴露依赖项是一个很好的架构。 但是在日志外观的情况下,我相信以下是正确的:
- 我仍然可以随时“换掉”日志框架
- 恕我直言,类并不真正依赖于 Logger。如果未配置日志记录,则使用 NullLogger。这几乎是“如果你需要它就可以”与“除非你提供它否则它将无法工作”的交易......(参见示例 #2)
那么,其他人怎么看?注入日志外观是不是矫枉过正? 关于这个主题有一些 similar questions,但更笼统地说 (infrastructure) - 我主要对日志记录感兴趣....
// 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!");
}
}
【问题讨论】:
标签: .net logging dependency-injection inversion-of-control