【发布时间】:2012-02-13 19:22:51
【问题描述】:
我最近一直在学习通过依赖注入和使用 Castle Windsor 来实现控制反转。我喜欢。我得到它。我头上的灯泡亮着。但是我对日志记录工具和ILogger 接口有一个唠叨的担忧。那真的在那里做什么?是给我的,还是只给温莎本身?
由于ILogger 旨在抽象出 log4net 和 Nlog 以及它支持的任何其他日志框架之间的差异,它必须代表它们之间的最小公分母。各种框架相似,但不一定相同。如果其中一个有一些很棒的功能,而另一个没有,则要么必须将其排除在 ILogger 之外,要么其他日志记录框架的 ILogger 实现必须对其进行无操作实现,或者其他不太令人满意的东西。
早在 Windsor 之前,我就是 log4net 的粉丝,我喜欢的很多库都使用它,比如 NHibernate。因此,如果我正在构建一个新应用程序,我将使用 log4net。我愿意承诺,并且我认为它是一个稳定的依赖项——例如,与需要System.Web 一样稳定的依赖项。我不会写我的组件来使用ILogger,我会写它们来使用ILog。但我得到的印象是,Windsor 希望我使用ILogger 进行自己的日志记录。当我不应该依赖于我的 IoC 容器时,这难道不是让我的项目依赖于 Windsor 吗?
我看到 Windsor 拥有日志工具的意义,因此它可以使用项目想要使用的任何日志框架来记录自己的操作。这似乎完全合情合理。但是如果我自己的代码不用ILogger,直接去log4net的ILog,那我放弃什么呢?我会后悔吗?
明显的反应是我可能想在六个月内更改日志记录框架。但我不会。 log4net 成熟稳定。这是一个范围有限且定义非常明确的项目,它几乎可以完美地实施。它可以被认为是“完成”。最多,我可能需要编写一个自定义附加程序来处理消息。 (也许出于某种原因,我想将它们写在明信片上并将它们放入邮件中。)但这在 log4net 框架中很容易完成,我会像使用任何其他 log4net appender 一样使用它。与更改 Web 平台相比,我不太可能更改日志记录框架。
【问题讨论】:
标签: inversion-of-control castle-windsor