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!

¿Fue útil?

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());

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top