我目前正在努力在我的应用程序中实现框外框外认证。但是,当使用统一作为我的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());
.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top