2011-01-10 6 views
7

Ich verwende ninject als meine IoC und ich schrieb einen Rollenanbieter wie folgt: die Instanz zu injizierenNinject mit MembershipProvider | Roleprovider

public class BasicRoleProvider : RoleProvider 
{ 
    private IAuthenticationService authenticationService; 

    public BasicRoleProvider(IAuthenticationService authenticationService) 
    { 
     if (authenticationService == null) throw new ArgumentNullException("authenticationService"); 
     this.authenticationService = authenticationService; 
    } 

    /* Other methods here */ 
} 

ich gelesen, dass Provider Klassen instanziiert erhalten, bevor ninject bekommt. Wie gehe ich das um? Ich habe derzeit diesen Ninject-Code:

Bind<RoleProvider>().To<BasicRoleProvider>().InRequestScope(); 

Von dieser Antwort here.

If you mark your dependencies with [Inject] for your properties in your provider class, you can call kernel.Inject(MemberShip.Provider) - this will assign all dependencies to your properties.

Ich verstehe das nicht.

+0

mögliche Duplikate von [Injizieren Repository zu benutzerdefinierten Mitgliedschaft Anbieter mit Ninject] (http://StackOverflow.com/Questions/5596441/inject-repository-to-Custom-Membership-Provider-with-ninject) –

Antwort

9

Ich glaube, dass dieser Aspekt des ASP.NET-Framework sehr viel config getrieben wird.

Für Ihre letzte Bemerkung, was sie bedeuten, dass statt auf Konstruktor Injektion zu verlassen (die auftritt, wenn die Komponente erstellt wird), können Sie stattdessen Setter Injektion verwenden können, zum Beispiel:

public class BasicRoleProvider : RoleProvider 
{ 
    public BasicRoleProvider() { } 

    [Inject] 
    public IMyService { get; set; } 
} 

Es wird automatisch injizieren Sie eine Instanz Ihres registrierten Typs in die Eigenschaft. Sie können dann den Anruf von Ihrer Anwendung aus tätigen:

public void Application_Start(object sender, EventArgs e) 
{ 
    var kernel = // create kernel instance. 
    kernel.Inject(Roles.Provider); 
} 

Angenommen, Sie haben Ihren Rollenanbieter in der Konfig registriert. Die Registrierung des Anbieters auf diesem Weg ermöglicht eine große Modularität, da die Implementierung und Anwendung Ihres Anbieters immer noch sehr stark entkoppelt sind.

+0

Dies funktioniert nicht. Die Instanz ist immer noch null. –

+0

Ich probierte 'kernel.Inject (Roles.Provider)' und 'kernel.Inject (Membership.Provider)' –

+0

Hmm, ich habe das mit 'kernel.Inject (Roles.Provider)' getestet. Können Sie Ihre Frage mit Ihrem Konfigurationscode und Ihrem RoleProvider-Code aktualisieren, den Sie injizieren möchten? Können Sie überprüfen, ob Sie Ihren RoleProvider auch als Standard festgelegt haben? –

Verwandte Themen