문제

현재 새로운 ASP.NET MVC 5를 내 응용 프로그램으로 출구 아웃 인증을 구현하는 데 현재 작업하고 있습니다.그러나 IOC로 Unity를 사용할 때는 오류가 발생했기 때문에 AccountController의 일부를 사용할 수 없습니다.

유형 iUserStore`1에는 액세스 가능한 생성자가 없습니다.

이것은 Global.asax

에서 호출되는 내 주어진 Unity 설정입니다.
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;
    }
}
.

와 여기에서는 새 계정 Controller.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가 주입되도록 요구합니다.

여기에 나열하지 않았지만 iUserStore가 필요한 유일한 생성자가 있습니다.Unity는 해결하려고 시도했으며 직접 사용할 수있는 생성자를 찾거나 매개 변수를 해결할 수 없습니다.

다른 팁

Wiktor에 동의합니다.

매개 변수없는 생성자를 단일성으로 등록하고 더 긴 매개 변수를 수행하여이를 중지 할 수 있습니다.

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top