2012-11-06 96 views
2

所有這些代碼都是我自己的庫,供我的客戶端應用程序使用 我的安裝程序與文檔here中的安裝程序完全相同。我也有一個引導程序幾乎一樣發現here,除了我用:_bootStrapContainer = new WindsorContainer().Install(FromAssembly.Named("MyAssembly"));我需要與Castle Windsor解決ILogger嗎?

我想安裝將注入Castle.Core.Logging.ILoggerMyLogger級以下,但我總是得到空記錄,除非我解決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; 
     } 
    } 
} 

回答

1

您需要註冊Windsor日誌記錄工具以使Windsor能夠爲您解析記錄器屬性。

下面是使用xml設置日誌工具,並使用code

的例子基本上它歸結爲:

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

感謝您的答覆,我認爲AddFacility只是另一種註冊方式,除非我錯了,我也認爲windsor會自動解決我的ILogger屬性到Core ILogger接口。 – OutOFTouch

+0

考慮到Windsor的文檔說明了這一點,我只是認爲我已經做出了決心,但我發現我仍然需要解決:「這是如何使用的?」,你可能會問?你所要做的就是向Castle.Core.Logging命名空間中的Castle.Core程序集請求一個對ILogger接口的引用(通常的做法是使用settable屬性而不是構造函數),而你一切都準備好了。該容器將爲您提供一個已配置且可以隨時使用的ILogger實例。 – OutOFTouch

+0

我對設施的理解是設施擴展了容器的現有功能(http://docs.castleproject.org/Windsor.Facilities.ashx)。通過閱讀更多關於日誌記錄工具(http://docs.castleproject.org/Windsor.Logging-Facility.ashx),該工具允許您的課程解析ILogger接口的實現。容器不會自動注入記錄器實例,因爲涉及解析屬性和注入記錄器。它不是注入記錄器的容器的核心功能,因此是設施。 –

0

也許這是行不通的,因爲它有媒體鏈接的值,嘗試再次沒有初始化該字段,移動到該屬性的獲得