Jak zintegrować dostawcę członkostwa IoC z ASP.NET MVC

Mam niestandardowego dostawcę członkostwa / ról, którego używam w moich kontrolerach MVC, które również chcę mieć dostęp do ASP.NET MVC, więc mogę korzystać z filtrów AuthorizationFilters, itd. Ponieważ tak wielu ludzi wdrożyło niestandardowych dostawców, wyobrażam sobie, że wielu ludzi to jednak nie wymyśliłem ani nie znalazłem postów, które dotyczą tego problemu.Ten post jest jakby drugą stroną mojego pytania. W moim przypadku mój dostawca działa dobrze z moimi kontrolerami i chcę, aby MVC go używał.

Mój dostawca jest zaimplementowany z projektem wtrysku IoC / zależności. Dostawca udostępnia dodatkowe funkcje poza podstawowym interfejsem API API. W moich kontrolerach używam Castle Windsor do tworzenia instancji. Kod wygląda podobnie do:

<code>public class HomeController : Controller {
    IMembershipService _membershipService;
    public HomeController(IMembershipService membershipService) {
        _membershipService= membershipService;
    }
}

<castle>
 <components>
  <component id="MembershipService" 
             service="IMembershipService, MyApp" 
             type="MembershipService, MyApp" lifestyle="PerWebRequest">
    <parameters>
      <connectionString>#{defaultConnectionString}</connectionString>
    </parameters>
  </component>
 </components>
</castle>

public class WindsorControllerFactory : DefaultControllerFactory {
    private WindsorContainer _container;
    public WindsorControllerFactory() {
        _container = new WindsorContainer(new XmlInterpreter(new ConfigResource("castle")));

        List<Type> controllerTypes = new List<Type>();
        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);
    }
</code>

To wszystko działa świetnie w moim kodzie C #, ale chcę połączyć mojego dostawcę z MVC, aby używać z nim filtrów [Autoryzuj]:

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

Wiem, że zwykłym sposobem informowania programu ASP.NET o niestandardowym członkostwie lub dostawcy ról jest plik web.config, jak poniżej, ale jeśli to zrobię, program ASP.NET spróbuje wywołać domyślny konstruktor, który nie zadziała. Każda pomoc doceniana.

<code><membership>
 <providers>
  <clear/>
  <add name="MyMembershipProvider" type="MyMembershipProvider">
 </providers>
</membership>
</code>

questionAnswers(1)

yourAnswerToTheQuestion