在LoggingFacility文檔(http://docs.castleproject.org/Windsor.Logging-Facility.ashx)的聲明如下:城堡LoggingFacility
「允許你問一個ILoggerFactory實例提供日誌記錄支持到不受溫莎管理的課程「
但是我如何確實要求一個ILoggerFactory實例,如果我的課程不是由Windsor管理的?
TIA
瑟倫
繼續說道:
我很新的使用溫莎(IOC),所以當你說「爲什麼你會不會有溫莎類經理」我開始想知道你是否說所有的班級都應該由溫莎管理...
我正在研究一些遺留代碼,並且已經在其上創建了一個服務接口......類似於:
namespace RESTServer.WindsorTestService
{
[ServiceContract(Namespace = "urn: RESTServer_WindsorTestService:IMyServiceClass")]
public interface IMyServiceClass
{
ILogger Logger // Will be injected by Windsor
{ get; set; }
[OperationContract]
[WebGet(UriTemplate = "MyMethod")]
int MyServiceMethod();
}
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
public class MyServiceClass : IMyServiceClass
{
private ILogger _logger = NullLogger.Instance;
public ILogger Logger // Will be injected by Windsor
{
get { return _logger; }
set { _logger = value; }
}
public int MyServiceMethod()
{
// ... which will populate val1, val2, val3
var val1 = 1;
var val2 = 10;
var val3 = 100;
var myCalc = new myLegacyClass(val1, val2, val3);
return myCalc.DoCalculate(1000);
}
}
public class myLegacyClass
{
private int _val1;
private int _val2;
private int _val3;
private static readonly ILog _logger = LogManager.GetLogger(typeof(myLegacyClass));
public myLegacyClass(int val1, int val2, int val3)
{
_val1 = val1;
_val2 = val2;
_val3 = val3;
}
public int DoCalculate(int val4)
{
_logger.Info("Doing some calculation");
return _val1 + _val2 + _val3;
}
}
}
其中遺留代碼已經使用log4net ....它工作正常,但我想知道如果myLegacyClass應該改變,以某種方式從溫莎獲取記錄器...我只是不知道什麼是最好的方式將.....
TIA 瑟倫
問題是myLegacyClass不是由Windsor管理的(因爲可能是很好的原因)。過去我做了一些醜陋的事情,但是我沒有使用ILogger,而是執行了以下操作:ServiceLocator.Current.GetInstance(typeof(ILoggerFactory))。然後在工廠調用.Create(Type)...非常混亂和醜陋。當我遇到舊的舊類問題時,我最終直接使用log4net。 – Kevin 2013-02-21 21:42:10