Unity IOC에 MVC 5 인증을 추가하는 방법은 무엇입니까?
-
21-12-2019 - |
문제
현재 새로운 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());
. 제휴하지 않습니다 StackOverflow