如何将 MVC 5 身份验证添加到 Unity IoC



我目前正在我的应用程序中实现新的 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 试图解决它,但找不到任何可以直接使用或解析其参数的构造函数。

相关内容

  • 没有找到相关文章

最新更新