Der Typ Rollenspeicher ist nicht dem Service IRoleStore zuweisbar

asp.net-mvc-5 autofac dependency-injection entity-framework-6

Frage

Ich versuche, die Abhängigkeitsinjektion mit Autofac für das Projekt unter Verwendung von MVC5 und EF6 einzurichten.

Mir fällt es schwer herauszufinden, wie die EntityFramework.RoleStore <EntityFramework.IdentityRole> Implementierung korrekt entkoppelt wird.
Ich hätte gerne eine Abhängigkeit nur von Identity.IRoleStore <Identity.IRole> aber ich bin mir bewusst, dass ich für generische Klassen die konkrete Implementierung, nicht die Schnittstelle angeben muss.

Das habe ich ausprobiert:

        builder.RegisterType<IdentityRole>().As<IRole>();
        builder.RegisterType<RoleManager<IRole>>();
        builder.RegisterType<RoleStore<IdentityRole>>().As<IRoleStore<IRole>>();
        builder.Register(c => new RoleManager<IRole>(c.Resolve<IRoleStore<IRole>>()));

Die vollständige Fehlermeldung:

Der Typ 'Microsoft.AspNet.Identity.EntityFramework.RoleStore 1[Microsoft.AspNet.Identity.EntityFramework.IdentityRole]' is not assignable to service 'Microsoft.AspNet.Identity.IRoleStore 1 [[Microsoft.AspNet.Identity.IRole, Microsoft .AspNet.Identity.Core, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35]].

Akzeptierte Antwort

Bis spät in die Party, aber das hat mit Autofac funktioniert:

builder.RegisterType<RoleStore<IdentityRole>>().As<IRoleStore<IdentityRole, string>>();

Mein komplettes Modul als Referenz:

builder.RegisterType<UserStore<ApplicationUser>>().As<IUserStore<ApplicationUser>>();
builder.RegisterType<RoleStore<IdentityRole>>().As<IRoleStore<IdentityRole, string>>();
builder.RegisterType<ApplicationUserManager>();
builder.RegisterType<ApplicationRoleManager>();  

Ich benutze Wrapper für den UserManager und RoleManager

public class ApplicationUserManager : UserManager<ApplicationUser>
{
    public ApplicationUserManager(IUserStore<ApplicationUser> store)
        : base(store)
    {
    }
}

public class ApplicationRoleManager : RoleManager<IdentityRole>
{
    public ApplicationRoleManager(IRoleStore<IdentityRole, string> roleStore)
        : base(roleStore)
    {            
    }       
}


Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum