如何将MVC 5身份验证添加到UNITY IOC?
-
21-12-2019 - |
题
我目前正在努力在我的应用程序中实现框外框外认证。但是,当使用统一作为我的IOC时,我不能使用accountController的任何部分,因为我给出了错误:
IUSerstore`1类型没有可访问的构造函数。
这是我在global.asax中调用的给定的Unity Setup。
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<IEmployeeRepository, EmployeeRepository>();
container.RegisterType<ITeamRepository, TeamRepository>();
container.RegisterType<ICompanyRepository, CompanyRepository>();
return container;
}
}
.
以及以下是新鲜accountcontroller.cs的默认构造函数
public AccountController()
: this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new BusinessTrackerUsersContext())))
{
}
public AccountController(UserManager<ApplicationUser> userManager)
{
UserManager = userManager;
}
public AccountController(UserManager<ApplicationUser> userManager)
{
UserManager = userManager;
}
.
和此处是在accountController构造函数中调用的项目。这些是具有新名称的默认值。
public class BusinessTrackerUsersContext : IdentityDbContext<ApplicationUser>
{
public BusinessTrackerUsersContext()
: base("DefaultConnection")
{
}
}
public class ApplicationUser : IdentityUser
{
}
.
任何帮助将被广泛欣赏!
解决方案
因为您的控制器上有两个构造函数,因此Unity将拾取具有更长参数列表,后者。它需要注入usermanager。
虽然您尚未在此列出它,但我怀疑是一个需要iUuserstore的唯一的构造函数。Unity尝试解决它,无法找到它可以直接使用或解决其参数的任何构造函数。
其他提示
我同意wiktor。
您可以使用UNITE注册不可分割的构造函数,并通过执行此操作,停止它延长参数:
container.RegisterType<AccountController>(new InjectionConstructor());
. 不隶属于 StackOverflow