城堡温莎伐木设施

Boo*_*oks 5 castle-windsor inversion-of-control

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

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

    ...
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

    ...
}
Run Code Online (Sandbox Code Playgroud)

我在网上搜索了我应该使用日志记录工具的原因,但我只是找到了如何使用它的文章,但不是为什么我应该使用它.我觉得我错过了这一点.暴露日志记录组件会让我感到害怕.

Mau*_*fer 5

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

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

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

这是一个服务定位器,该代码夫妻MyClassLogManager,这是恕我直言比你试图让远离恶化.