Внедрение зависимости в CustomAttribute с помощью Castle Windsor - PullRequest
15 голосов
/ 25 мая 2011

В моем приложении ASP.Net MVC я реализовал Custom ActionFilter для авторизации пользователей.

Я использую CastleWindsor для обеспечения внедрения зависимостей во все контроллеры следующим образом:

  protected virtual IWindsorContainer InitializeServiceLocator()
    {
        IWindsorContainer container = new WindsorContainer();
        ControllerBuilder.Current.SetControllerFactory(new WindsorControllerFactory(container));

        container.RegisterControllers(typeof(HomeController).Assembly);
        ComponentRegistrar.AddComponentsTo(container);

        ServiceLocator.SetLocatorProvider(() => new WindsorServiceLocator(container));

        return container;
    }

В моем CustomAttribute мне нужна зависимость, которая используется всеми моими контроллерами, однако я не могу использовать инъекцию на основе конструктора в атрибуте.

Так какой же самый чистый выход здесь?Как я могу предоставить зависимость?

Ответы [ 2 ]

13 голосов
/ 26 мая 2011

ОК - похоже, это дубликат Внедрение базы данных в атрибут проверки с ASP MVC и Castle Windsor , на который дан ответ.

Также Как использовать Windsor для добавления зависимостей в ActionFilterAttributes .

Прочитав все вышеперечисленное и ссылки на статьи, для меня ключевым является http://weblogs.asp.net/psteele/archive/2009/11/04/using-windsor-to-inject-dependencies-into-asp-net-mvc-actionfilters.aspx для всех, кто заинтересован.

1 голос
/ 26 мая 2011

Вы не можете.Атрибуты являются метаданными.Вкладывать в них поведение - неправильно.Размещение зависимостей еще хуже.

Используйте свой атрибут в качестве маркера для обозначения объектов, к которым вы хотите применить поведение и реализовать поведение в других местах.означает вызывающее пользовательское действие, которое использует данные из атрибута для обеспечения нужного вам поведения.

...