Подтвердить что ты не робот

Как добавить аутентификацию 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;
    }
}

И вот конструкторы по умолчанию для нового 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
{

}

Любая помощь будет широко оценена!

4b9b3361

Ответ 1

Поскольку у вас есть два конструктора на вашем контроллере, единство подберет тот, у которого есть более длинный список параметров, последний. Это требует, чтобы UserManager был введен.

Хотя вы не указали его здесь, я подозреваю, что у него есть единственный конструктор, который требует IUserStore. Unity попыталась разрешить его и не может найти конструктор, который он мог бы использовать напрямую или разрешить его параметры.

Ответ 2

Я согласен с Wiktor.

Вы можете зарегистрировать конструктор без параметров Unity, хотя и остановите его, взяв более длинный параметр, выполнив следующее:

container.RegisterType<AccountController>(new InjectionConstructor());