Castle Windsor的伐木设施有哪些用例?

时间:2012-02-13 19:22:52

标签: inversion-of-control castle-windsor

我最近一直在学习通过依赖注入反转控制,并使用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成熟稳定。这是一个范围有限且定义明确的项目,它实现得非常完美。它可以被认为是“完成”。最多,我可能需要编写一个自定义appender来处理消息。 (也许我想把它们写在明信片上并出于某种原因将它们放入邮件中。)但是这很容易在log4net框架内完成,而且我会像任何其他log4net appender一样使用它。我不太可能更改日志框架,而不是更改Web平台。

1 个答案:

答案 0 :(得分:0)

好像你已经决定直接使用log4net了。这是完全合理的,因为您认为它是一个稳定的依赖。我刚刚从log4net切换到NLog用于我们的项目,所以你可能会在将来更改日志框架,这是抽象有其优势的地方。

考虑使用日志记录抽象(除了丢失特定于特定日志框架的功能)时的另一个考虑因素是学习抽象的额外开销。这是否使代码开发人员能够或多或少地复杂起来?

在我们的案例中,我们发现NLog很容易直接安装和配置,我们决定丢失自定义日志记录抽象并从log4net切换(我们发现它的xml配置与NLog相比有点冗长)。