Как интегрировать поставщика членства IoC с ASP.NET MVC

У меня есть пользовательский поставщик членства / ролей, который я использую в своих MVC-controllerах, которые также хотят иметь доступ к ASP.NET MVC, поэтому я могу использовать AuthorizationFilters и т. Д. Так как многие люди внедряют пользовательские провайдеры, я думаю, многие люди сделали это, но я не понял его или не нашел публикации, которые конкретно касаются этой проблемы. Этот пост – это разногласия моего вопроса. В моем случае у меня есть мой пользовательский поставщик, который хорошо работает с моими controllerами, и я хочу, чтобы MVC тоже его использовал.

Мой провайдер реализован с использованием дизайна инъекций IoC / dependency. Поставщик предоставляет дополнительную функциональность за базовым API-интерфейсом членства / ролей. В моих controllerах я использую Castle Windsor для создания экземпляров. Код выглядит так:

public class HomeController : Controller { IMembershipService _membershipService; public HomeController(IMembershipService membershipService) { _membershipService= membershipService; } }     #{defaultConnectionString}     public class WindsorControllerFactory : DefaultControllerFactory { private WindsorContainer _container; public WindsorControllerFactory() { _container = new WindsorContainer(new XmlInterpreter(new ConfigResource("castle"))); List controllerTypes = new List(); foreach (Type t in Assembly.GetExecutingAssembly().GetTypes()) { if (typeof(IController).IsAssignableFrom(t)) controllerTypes.Add(t); } foreach (Type t in controllerTypes) { // LifestyleType.Transient = new controller instance for each request _container.AddComponentLifeStyle(t.FullName, t, LifestyleType.Transient); } } protected override IController GetControllerInstance(Type controllerType) { return (IController)_container.Resolve(controllerType); } 

Все это отлично работает в коде C #, но я хочу подключить своего провайдера к MVC, чтобы использовать с ним фильтры [Authorize]:

 [Authorize (Users="user1, user2", Roles="role8")] public ViewResult MyResult(int x) { // implement } 

Я знаю, что обычный способ сообщить ASP.NET о пользовательском членстве или поставщике ролей в файле web.config, как показано ниже, но если я это сделаю, ASP.NET просто попытается вызвать конструктор по умолчанию, который не будет работать. Любая помощь оценивается.

       

Самый простой способ заставить это работать – использовать стандартный механизм ASP.NET для в web.config. Вы просто разрешите использовать конструктор по умолчанию, но вы переопределите Initialize () и потянете туда зависимости. Используйте это как ссылку.

Лично из-за таких вещей я предпочитаю вообще избегать модели провайдера, поэтому я использую подход, аналогичный описанному в документах MonoRail . ИМХО он менее раздутый и более гибкий. В конце концов, это просто настройка HttpContext.User с правильной реализацией IPrincipal , что и использует AuthorizeAttribute.

Недавно я писал о решении сделать правильный IoC с помощью MembershipProviders .

  • Циркулярная зависимость впрыска угловая 2
  • Logging, Aspect Oriented Programming и Injection Dependency Injection - Попытка понять все это
  • Доступ к инжектору Guice в его модуле?
  • Как использовать контейнер DI / IoC с привязкой модели в ASP.NET MVC 2+?
  • Инъекционная инъекция с использованием Azure WebJobs SDK?
  • Инъекция Мокито издевается над весенним бобаном
  • Каковы преимущества контейнеров для инъекций зависимостей?
  • Передача данных в дочерние компоненты маршрутизатора-выхода (угловые 2)
  • Зависимость впрыска wcf
  • Использование инъекции зависимостей без какой-либо библиотеки DI
  • Включение зависимостей в фильтры действия ASP.NET MVC 3. Что не так с этим подходом?
  • Interesting Posts

    PHP-тернарный оператор против оператора нулевой коалесценции

    Переопределение свойства суперclassа с разным типом в Swift

    Как сделать раздел диска и установить на него Windows с установочного диска HP

    Определите, активировано ли текущее приложение (имеет фокус)

    Официальная поддержка «Boost library» для Android и iOS?

    Как программно выбрать элемент в WPF TreeView?

    Установка SSL на сервере Wamp: ошибка в httpd-ssl.conf

    angularjs: ng-src эквивалент для background-image: url (…)

    Почему существует такая большая разница между «Размер» и «Размер на диске»?

    Получить реальный путь от URI, Android KitKat новая система хранения данных

    Имеют ли эти утверждения о указателях одинаковый эффект?

    Возможно ли повысить разрешение программы в Windows без использования «Запуск от имени администратора»?

    Установите языковой стандарт для системы по умолчанию UTF-8

    Perl для сопоставления с регулярными выражениями в терминале?

    R, передающая имя файла сценарию в аргументах (Windows)

    Давайте будем гением компьютера.