【问题标题】:Do I have to resolve ILogger with Castle Windsor?我必须用 Castle Windsor 解决 ILogger 吗?
【发布时间】:2012-11-06 20:06:29
【问题描述】:

所有这些代码都是我自己的库,供我的客户端消费者应用程序使用 我的安装程序与here 中的文档完全相同。我也有一个与 here 几乎相同的引导程序,除了我使用:_bootStrapContainer = new WindsorContainer().Install(FromAssembly.Named("MyAssembly"));

我认为安装程序会将Castle.Core.Logging.ILogger 注入下面的MyLogger 类,但我总是得到空记录器,除非我像这样解决MyLogger.Logger

MyLogger lgr = new MyLogger();            
lgr.Logger = container.Resolve<ILogger>();

所以我的问题是我是否总是必须解决或者我没有做正确的事情 注册?

using Castle.Core.Logging;

public class MyLogger
{
   private ILogger _logger = NullLogger.Instance;

   public ILogger Logger
   {
       get
       {
           return _logger;
       }
       set
       {
           _logger = value;
       }
    } 
}

【问题讨论】:

    标签: castle-windsor log4net ioc-container


    【解决方案1】:

    您需要注册 Windsor 日志记录工具,以使 Windsor 能够为您解析 Logger 属性。

    以下是使用xmlcode 设置日志记录工具的示例

    基本上归结为:

    container.AddFacility<LoggingFacility>(f => f.UseLog4Net());
    

    【讨论】:

    • 感谢您的回复,我认为 AddFacility 只是另一种注册方式,除非我弄错了,否则我还认为 Windsor 会自动将我的 ILogger 属性解析为 Core ILogger 接口。
    • 考虑到 windsor 文档中说的这一点,我只是假设解决方案已为我完成,但我发现我仍然需要解决:“这是如何使用的?”,您可能会问?您需要做的就是请求对位于 Castle.Core.Logging 命名空间中的 Castle.Core 程序集中的 ILogger 接口的引用(通常的做法是使用可设置的属性而不是构造函数)然后您'都准备好了。该容器将为您提供一个已配置并可随时使用的 ILogger 实例。
    • 我对设施的理解是设施扩展了容器的现有功能(docs.castleproject.org/Windsor.Facilities.ashx)。通过阅读有关日志记录工具 (docs.castleproject.org/Windsor.Logging-Facility.ashx) 的更多信息,该工具允许您的类解析 ILogger 接口的实现。由于解析属性和注入记录器所涉及的开销,容器不会自动注入记录器实例。注入记录器不是容器的核心功能,因此是设施。
    【解决方案2】:

    也许它不起作用,因为它已经有一个值,在不初始化字段的情况下重试,将它移到属性的 get 处

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多