C# 如何向Unity IoC添加MVC 5身份验证?
我目前正致力于在我的应用程序中实现新的ASP.NET MVC 5开箱即用身份验证。但是,当使用Unity作为我的IoC时,我不能使用AccountController的任何部分,因为我遇到了以下错误: 类型IUserStore`1没有可访问的构造函数 这是我给定的unity设置,在global.asax中调用C# 如何向Unity IoC添加MVC 5身份验证?,c#,asp.net,asp.net-mvc,asp.net-mvc-5,asp.net-identity,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 5,Asp.net Identity,我目前正致力于在我的应用程序中实现新的ASP.NET MVC 5开箱即用身份验证。但是,当使用Unity作为我的IoC时,我不能使用AccountController的任何部分,因为我遇到了以下错误: 类型IUserStore`1没有可访问的构造函数 这是我给定的unity设置,在global.asax中调用 public class DependencyConfig { public static void Initialise() { var containe
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;
}
}
公共类依赖项配置
{
公共静态无效初始化()
{
var container=BuildUnityContainer();
SetResolver(新UnitedDependencyResolver(容器));
}
私有静态IUnityContainer BuildUnityContainer()
{
var container=new UnityContainer();
//在此处向容器注册所有组件
//无需注册控制器
container.RegisterType();
container.RegisterType();
container.RegisterType();
返回容器;
}
}
下面是新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;
}
publiccountcontroller()
:此(新UserManager(新UserStore(新BusinessTrackerUserContext()))
{
}
公共帐户控制器(用户管理器用户管理器)
{
UserManager=UserManager;
}
公共帐户控制器(用户管理器用户管理器)
{
UserManager=UserManager;
}
下面是AccountController构造函数中调用的项。这些是具有新名称的默认值
public class BusinessTrackerUsersContext : IdentityDbContext<ApplicationUser>
{
public BusinessTrackerUsersContext()
: base("DefaultConnection")
{
}
}
public class ApplicationUser : IdentityUser
{
}
公共类BusinessTrackerUserContext:IdentityDbContext
{
public BusinessTrackerUsersContext()
:base(“默认连接”)
{
}
}
公共类应用程序用户:IdentityUser
{
}
任何帮助都将受到广泛的感谢 因为控制器上有两个构造函数,unity将选择参数列表较长的构造函数,后者。它需要注入UserManager 虽然您没有在这里列出它,但我怀疑is只有一个构造函数需要IUserStore。Unity试图解决它,但找不到任何它可以直接使用的构造函数或解决它的参数。我同意Wiktor 但是,您可以向Unity注册无参数构造函数,并通过执行以下操作停止它使用更长的参数:
container.RegisterType<AccountController>(new InjectionConstructor());
container.RegisterType(新注入构造函数());
谢谢您的帮助!虽然hutchonoid有实际的语法来注册它,但是您已经解释过了,所以我可以理解为什么。谢谢您的帮助!这正是我想要的。谢谢你的帮助。我来到这里()是为了进一步了解InjectionConstructor对象。如果您想用多个参数映射到AccountController中的构造函数,可以将这些参数作为对象数组传递给InjectionConstructor。@hutchonoid当我按照您的建议进行操作时,我的帐户/登录
返回404错误!我使用最新版本的Unity在MVC5上。@hutchonoid您的推荐很到位。