Касл: Как я могу получить правильный ILogger в перехватчике регистрации? - PullRequest
2 голосов
/ 25 ноября 2010

Если вы используете LoggingFacility в Castle Windsor, контейнер автоматически разрешит регистратор, связанный с вашим классом, если у вас есть дополнительные зависимости регистратора в вашем классе (свойство ILogger, в которое замок может внедрить регистратор), но как мне использоватьсредство, если я хочу реализовать регистрацию с использованием AOP (перехватчик)?Я в основном хочу написать что-то вроде:

    public void Intercept(IInvocation invocation)
    {
        ILogger logger = LogManager.GetLogger(invocation.TargetType);
        //..
    }

Но в среде Castle нет LogManager, о котором можно было бы говорить.Каков наилучший подход к решению этой проблемы?Должен ли я просто игнорировать подход объекта и использовать log4net непосредственно в перехватчике?

1 Ответ

4 голосов
/ 25 ноября 2010

Возьмите зависимость от Castle.Core.Logging.ILoggerFactory в своем конструкторе и создайте регистратор на фабрике в методе Intercept

public class LoggingInterceptor : IInterceptor
{
    readonly ILoggingFactory loggingFactory;

    public LoggingInterceptor(ILoggingFactory loggingFactory)
    {
        this.loggingFactory = loggingFactory;
    }

    public void Intercept(IInvocation invocation)
    {
        ILogger logger = loggingFactory.Create(invocation.TargetType);
        //..
    }
}
...