如何将MVC 5身份validation添加到Unity IoC?

我正在努力在我的应用程序中实现新的ASP.NET MVC 5开箱即用身份validation。 但是当使用Unity作为我的IoC时,我不能使用AccountController的任何部分,因为我给出了错误:

IUserStore类型`1没有可访问的构造函数。

这是我给出的统一设置,在global.asax中调用

public class DependencyConfig { public static void Initialise() { var container = BuildUnityContainer(); DependencyResolver.SetResolver(new UnityDependencyResolver(container)); } private static IUnityContainer BuildUnityContainer() { var container = new UnityContainer(); // register all your components with the container here // it is NOT necessary to register your controllers container.RegisterType(); container.RegisterType(); container.RegisterType(); return container; } } 

这里是新的AccountController.cs的默认构造函数

 public AccountController() : this(new UserManager(new UserStore(new BusinessTrackerUsersContext()))) { } public AccountController(UserManager userManager) { UserManager = userManager; } public AccountController(UserManager userManager) { UserManager = userManager; } 

以下是AccountController构造函数中调用的项目。 这些是具有新名称的默认值。

 public class BusinessTrackerUsersContext : IdentityDbContext { public BusinessTrackerUsersContext() : base("DefaultConnection") { } } public class ApplicationUser : IdentityUser { } 

任何帮助将受到广泛赞赏!

因为你的控制器上有两个构造函数,所以unity将选择具有较长参数列表的构造函数,后者。 它需要注入UserManager。

虽然你没有在这里列出它,但我怀疑它是唯一一个需要IUserStore的构造函数。 Unity试图解决它,找不到它可以直接使用的任何构造函数或解析它的参数。

我同意Wiktor。

您可以使用Unity注册无参数构造函数,并通过执行以下操作停止它获取较长的参数:

 container.RegisterType(new InjectionConstructor());