Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何向Unity IoC添加MVC 5身份验证?_C#_Asp.net_Asp.net Mvc_Asp.net Mvc 5_Asp.net Identity - Fatal编程技术网

C# 如何向Unity IoC添加MVC 5身份验证?

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

我目前正致力于在我的应用程序中实现新的ASP.NET MVC 5开箱即用身份验证。但是,当使用Unity作为我的IoC时,我不能使用AccountController的任何部分,因为我遇到了以下错误:

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

这是我给定的unity设置,在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;
    }
}
公共类依赖项配置
{
公共静态无效初始化()
{
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您的推荐很到位。