Включение зависимости в CustomAttribute с помощью Castle Windsor

В моем приложении ASP.Net MVC я применил пользовательский 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 мне нужна зависимость, которая используется всеми моими контроллерами, однако я не могу использовать метод на основе конструктора на основе атрибута.

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

Ответы

Ответ 1

ОК - это, похоже, дубликат вставки базы данных в атрибут проверки с 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 для всех, кто интересуется.

Ответ 2

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

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

В MVC в другом месте обычно используется пользовательский action invoker, который использует данные из этого атрибута для обеспечения требуемого поведения.