Шаблоны проектов ASP.NET MVC 1.0 включают класс AccountController
, который поддерживает внедрение конструктора:
public AccountController(IFormsAuthentication formsAuth,
IMembershipService service)
{
FormsAuth = formsAuth ?? new FormsAuthenticationService();
MembershipService = service ?? new AccountMembershipService();
}
Также включен класс AccountMembershipService
, который также поддерживает внедрение конструктора:
public AccountMembershipService(MembershipProvider provider)
{
_provider = provider ?? Membership.Provider;
}
Я уверен, что многие из вас использовали их для модульного тестирования, но моя цель - внедрить SqlMembershipProvider
с помощью Windsor и, таким образом, настроить его во время выполнения, используя XML-файлы Windsor, а не web.config. Другими словами, Я хочу использовать инжекцию конструктора для AccountMembershipService
класса , и я хочу продолжать использовать встроенную систему членства ASP.NET 2.0. Я просто хочу, чтобы конфигурация системы членства проходила через Windsor IoC.
Возможно ли это без написания моего собственного MembershipProvider или SqlMembershipProvider
не очень хорошо работает с IoC?
Из MSDN : «ASP.NET вызывает конструктор SqlMembershipProvider для создания экземпляра класса SqlMembershipProvider, как указано в конфигурации для приложения. Этот конструктор не предназначен для использования из вашего кода . "
Мне кажется, Фил задал очень похожий вопрос , вот ответов , которые он получил.
Спасибо за вашу помощь.
<Ч />
UPDATE:
Просто чтобы быть понятным, моя причина для поддержки приложения MembershipProvider через DI заключается в поддержке нескольких арендаторов. Каждый арендатор имеет изолированную базу данных с таблицами членства ASP . DI позволяет мне переключать строки подключения во время выполнения и, таким образом, сохранять независимость основного приложения от того, какая база данных используется для каждого арендатора. Виндзор контролирует DI и «знает», какой арендатор делает запрос через URL:
var url = HttpContext.Current.Request.ServerVariables["HTTP_HOST"]
Майк Хэдлоу пишет об этой технике . Я просто пытаюсь интегрировать SqlMembershipProvider
в его использование этого дизайна IoC.