Как разрешить зависимость журнала от постшерстного аспекта, используя внедрение зависимости - PullRequest
2 голосов
/ 08 марта 2012

, поэтому я собираю проект, используя NLog с Postsharp.У меня есть атрибут OnMethodBoundaryAspect для украшения классов и обеспечения перехваченного выполнения для ведения журнала.Мой DI-контейнер - Unity.

Итак, используя только DI (не ServiceLocator), как мне разрешить объект Log внутри класса аспекта, чтобы обеспечить ведение журнала?В прошлом я использовал ServiceLocator для разрешения объекта журнала, но я пытаюсь уйти от этого, поскольку я действительно начинаю верить, что ServiceLocator действительно является анти-паттерном (да, я знаю, что есть немного святоговойна по этому вопросу).

Спасибо!

1 Ответ

1 голос
/ 14 марта 2013

добавить регистратор статических свойств в ваш класс Aspect

public class LogAspect : OnMethodBoundaryAspect
{
    /// <summary>
    /// Gets or sets the logger.
    /// </summary>
    public static ILogger logger { get; set; }

установите переменную logger в вашем методе init приложения с вашим классом ILogger и исключите все методы перед этой инициализацией с помощью AttributeExclude.

    [LogAspect(AttributeExclude = true)]
    protected void Application_Start()
    {
        _windsorContainer = new WindsorContainer();
        ApplicationDependencyInstaller.RegisterLoggingFacility(_windsorContainer);
        LogAspect.logger = _windsorContainer.Resolve<ILogger>();
...