RoleStore <identityrole>类型不能分配给服务IRoleStore <irole> </irole> </identityrole>

时间:2013-11-25 08:58:16

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

我正在尝试使用MVC5和EF6为项目设置Autofac依赖注入。

我很难弄清楚如何正确地解耦EntityFramework.RoleStore&lt; EntityFramework.IdentityRole&gt;实现。
我想只依赖于Identity.IRoleStore&lt; Identity.IRole&gt;但我知道对于泛型类,我需要指定具体的实现,而不是接口。

这就是我的尝试:

        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>>()));

完整的错误消息:

  

类型'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]]”。

1 个答案:

答案 0 :(得分:12)

参加聚会的时间已经很晚了,但这对Autofac来说很有用:

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

我的完整模块供参考:

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

我正在使用UserManager和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)
    {            
    }       
}