¿Cómo agregar autenticación MVC 5 a Unity IOC?
-
21-12-2019 - |
Pregunta
Actualmente estoy trabajando en la implementación de la nueva autenticación de ASP.NET MVC 5 fuera de la caja en mi solicitud.Sin embargo, cuando se usa la unidad como mi COI, no puedo usar ninguna parte del ContrateController porque me dan el error:
El tipo IUSERSTORE`1 no tiene un constructor accesible.
Esta es mi configuración de Unity Dada que se llama en 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;
}
}
y aquí están los constructores predeterminados de un recuento frescoController.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;
}
Y aquí están los artículos que se llaman en los constructores de ContrateController.Estos son los valores predeterminados con nuevos nombres.
public class BusinessTrackerUsersContext : IdentityDbContext<ApplicationUser>
{
public BusinessTrackerUsersContext()
: base("DefaultConnection")
{
}
}
public class ApplicationUser : IdentityUser
{
}
¡Cualquier ayuda sería ampliamente apreciada!
Solución
Porque tiene dos constructores en su controlador, la unidad recogerá la única con la lista de parámetros más largos, este último.Requiere que el USERMANAGER sea inyectado.
Aunque no lo ha enistado aquí, sospecho que tiene un constructor único que requiere el IUSERSTORE.La unidad intentó resolverlo y no puede encontrar ningún constructor que pueda usar directamente o resolver sus parámetros.
Otros consejos
Estoy de acuerdo con Wiktor.
Podría registrar el constructor infalógeno con unidad, y deja de tomar el parámetro más largo haciendo esto:
container.RegisterType<AccountController>(new InjectionConstructor());