1

我正在嘗試設置MVC Unity與MVC標識的組合。負責註冊和登錄用戶的控制器應該有一個用戶和角色管理器。所以,我創建了下面的類:MVC標識2和Unity 4 - DI角色商店

public class UserController : Controller 
{ 
    private readonly UserManager<IdentityUser> _userManager; 
    private readonly RoleManager<IdentityRole> _roleManager; 

    public UserController(IUserStore<IdentityUser> userStore, 
     IRoleStore<IdentityRole> roleStore) 
    { 
     _userManager = new UserManager<IdentityUser>(userStore); 
     _roleManager = new RoleManager<IdentityRole>(roleStore); 
    } 
} 

我也有一個名爲UnityControllerFactory類,它描述了團結必要的綁定:

public class UnityControllerFactory : DefaultControllerFactory 
{ 
    private IUnityContainer _container; 

    public UnityControllerFactory() 
    { 
     _container = new UnityContainer(); 
     AddBindings(); 
    } 

    protected override IController GetControllerInstance(RequestContext requestContext, 
     Type controllerType) 
    { 
     if (controllerType != null) 
     { 
      return _container.Resolve(controllerType) as IController; 
     } 
     else 
     { 
      return base.GetControllerInstance(requestContext, controllerType); 
     } 
    } 

    private void AddBindings() 
    { 
     var injectionConstructor= new InjectionConstructor(new DbContext()); 
     _container.RegisterType<IUserStore<IdentityUser>, UserStore<IdentityUser>>(
      injectionConstructor); 
     _container.RegisterType<IRoleStore<IdentityRole>, RoleStore<IdentityRole>>(
      injectionConstructor); 
    } 
} 

註冊在Unity Rolestore中給出了一個錯誤:

The type 'Microsoft.AspNet.Identity.EntityFramework.RoleStore' cannot be used as type parameter 'TTo' in the generic type or method 'UnityContainerExtensions.RegisterType(IUnityContainer, params InjectionMember[])'.
There is no implicit reference conversion from 'Microsoft.AspNet.Identity.EntityFramework.RoleStore' to 'Microsoft.AspNet.Identity.IRoleStore'.

回答

1

我找到了。在UnityControllerFactory類,你做到以下幾點:

_container.RegisterType<IRoleStore<IdentityRole, string>, 
    RoleStore<IdentityRole, string, IdentityUserRole>>(injectionConstructor); 

,並在UserController類:

public UserController(IUserStore<IdentityUser> userStore, 
    IRoleStore<IdentityRole, string> roleStore) 
{ ... }