如何将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());