我目前正在我的应用程序中实现新的 ASP.NET MVC 5开箱即用的身份验证。但是,当使用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<IEmployeeRepository, EmployeeRepository>();
container.RegisterType<ITeamRepository, TeamRepository>();
container.RegisterType<ICompanyRepository, CompanyRepository>();
return container;
}
}
下面是新帐户控制器的默认构造函数.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;
}
下面是在帐户控制器构造函数中调用的项。这些是具有新名称的默认值。
public class BusinessTrackerUsersContext : IdentityDbContext<ApplicationUser>
{
public BusinessTrackerUsersContext()
: base("DefaultConnection")
{
}
}
public class ApplicationUser : IdentityUser
{
}
任何帮助将不胜感激!
我同意Wiktor的观点。
不过,您可以使用 Unity 注册无参数构造函数,并通过执行以下操作来停止它使用较长的参数:
container.RegisterType<AccountController>(new InjectionConstructor());
因为控制器上有两个构造函数,所以 Unity 将选取参数列表较长的构造函数,即后者。它需要注入用户管理器。
虽然你没有在这里列出它,但我怀疑它只有一个需要 IUserStore 的构造函数。Unity 试图解决它,但找不到任何可以直接使用或解析其参数的构造函数。