vista - ¿Cómo se puede inyectar un proveedor de membresía personalizado asp.net(mvc2) con Ninject?
mvc visual studio 2015 (3)
El modelo de proveedor de membresía solo puede crear instancias de un proveedor configurado cuando tiene un constructor predeterminado. Puede probar esto usando el patrón Localizador de servicios, en lugar de usar Inyección de dependencia. Ejemplo:
public class MyMembershipProvider : MembershipProvider
{
IMyRepository _repository;
public MyMembershipProvider()
{
// This example uses the Common Service Locator as IoC facade, but
// you can change this to call NInject directly if you wish.
_repository = ServiceLocator.Current.GetInstance<IMyRepository>;
}
OK, entonces he estado trabajando en esto por horas. Encontré un par de publicaciones aquí, pero nada que resuelva el problema. Entonces, déjame intentarlo de nuevo ...
Tengo una aplicación MVC2 que usa Ninject y un proveedor de membresía personalizado.
Si intento inyectar el proveedor usando el ctor, aparece un error: ''No se ha definido un constructor sin parámetros para este objeto''.
public class MyMembershipProvider : MembershipProvider
{
IMyRepository _repository;
public MyMembershipProvider(IMyRepository repository)
{
_repository = repository;
}
También he estado jugando con fábricas e Initialize (), pero todo está saliendo en blanco.
¿Alguna idea / ejemplo?
Así es como pude hacer esto:
1) Creé una clase de ayuda estática para Ninject
public static class NinjectHelper
{
public static readonly IKernel Kernel = new StandardKernel(new FooServices());
private class FooServices : NinjectModule
{
public override void Load()
{
Bind<IFooRepository>()
.To<EntityFooRepository>()
.WithConstructorArgument("connectionString",
ConfigurationManager.ConnectionStrings["FooDb"].ConnectionString);
}
}
}
2) Aquí está mi anulación de membresía:
public class FooMembershipProvider : MembershipProvider
{
private IFooRepository _FooRepository;
public FooMembershipProvider()
{
NinjectHelper.Kernel.Inject(this);
}
[Inject]
public IFooRepository Repository
{
set
{
_FooRepository = value;
}
}
...
Con este enfoque, realmente no importa cuando se crea una instancia del proveedor de membresía.
Tuve el mismo problema exactamente en el mismo lugar del libro. No fue hasta más adelante en el libro que noté que había dos archivos web.config separados. Inicialmente coloqué mi clave connectionString en el archivo web.config incorrecto. No fue hasta que coloqué ConnectionString en el archivo web.config correcto que desapareció el error "sin constructor sin parámetros".