2011-01-10 15 views
7

estoy usando ninject como mi COI y me escribió un proveedor de funciones de la siguiente manera:Ninject con 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 */ 
} 

leí que Provider clases consiguen una instancia antes ninject llega a inyectar la instancia. ¿Cómo voy alrededor de esto? Actualmente tengo este código de ninject:

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

De esta respuesta 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.

no entiendo esto.

+0

posible duplicado de [Inyectar depósito en proveedor de pertenencia personalizado con Ninject] (http://stackoverflow.com/questions/5596441/inject-repository-to-custom-membership-provider-with-ninject) –

Respuesta

9

Creo que este aspecto del marco ASP.NET está muy orientado a la configuración.

Para su último comentario, lo que quieren decir es que en lugar de depender de la inyección de constructor (que se produce cuando se crea el componente), puede utilizar la inyección de setter lugar, por ejemplo:

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

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

automáticamente se Inyectar una instancia de su tipo registrado en la propiedad. A continuación, puede realizar la llamada desde su aplicación:

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

Suponiendo que ha registrado su proveedor de roles en la configuración. Registrar el proveedor de esta manera todavía permite una gran modularidad, ya que la implementación y la aplicación de su proveedor aún están muy desacopladas.

+0

Esto no funciona. La instancia sigue siendo nula. –

+0

Intenté 'kernel.Inject (Roles.Provider)' y 'kernel.Inject (Membership.Provider)' –

+0

Hmm, he probado esto con 'kernel.Inject (Roles.Provider)'. ¿Puede actualizar su pregunta con su código de configuración y su código RoleProvider donde está intentando inyectar? ¿Puedes verificar que también configuraste RoleProvider como predeterminado? –

Cuestiones relacionadas