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