【问题标题】:Castle windsor logging facility温莎城堡伐木设施
【发布时间】:2010-11-15 12:36:28
【问题描述】:

我正在尝试删除一些日志记录依赖项,并偶然发现了 Castle Windsor 的日志记录工具。但是,我有点怀疑我是否应该使用它。

public class MyClass
{
    public Castle.Core.Logging.ILogger Logger { get; set; }

    ...
}

Windsor 的日志记录工具要求您将记录器作为属性公开。这真的是一个好习惯吗?我觉得我几乎要打破封装,因为通常当我重用一个组件时,我不关心它的日志记录机制,我通常不希望看到它暴露。

如果我使用使用静态类来创建日志的自定义包装器,我可以将其保密。例如:

public class MyClass
{
    private static MyCustomWrapper.ILogger Logger = LogManager.GetLogger(typeof(MyClass));

    ...
}

我已经在网上搜索了我应该使用日志记录工具的原因,但我只找到关于如何使用它的文章,而不是 为什么我应该使用它。我觉得我错过了重点。暴露日志组件有点让我害怕。

【问题讨论】:

    标签: inversion-of-control castle-windsor


    【解决方案1】:

    Windsor 的日志记录工具要求您将记录器作为属性公开。

    不一定。您还可以将您的记录器作为构造函数(即强制)依赖项。记录器通常被声明为属性(即可选依赖项),因为可能没有记录器。也就是说,组件应该能够在没有记录器的情况下运行。

    如果我使用使用静态类创建日志的自定义包装器

    这是一个服务定位器,该代码将 MyClassLogManager 结合起来,恕我直言,这比您试图摆脱的更糟糕。

    【讨论】:

    • 但是我不是已经和Castle.Core.Logging.ILogger 耦合了吗?还是因为LogManager是一个静态类,无法替换?
    • @Ashley:完全正确。与接口的耦合要少得多。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多