Estoy trabajando en el sitio web de MVC3, tratando de usar Ninject para resolver mis dependencias. Tengo el siguiente escenario:Uso de Dependency Injection en ASP.NET MVC3 Model Binder
public class UserModelBinder : IModelBinder
{
//[Inject]
public UserDataService userData { get; set; }
public object BindModel(
ControllerContext controllerContext,
ModelBindingContext bindingContext)
{
Guid UserID =
(Guid)Membership.GetUser().ProviderUserKey;
//userDataService = DependencyResolver.Current
// .GetService<UserDataService>();
User user = userDataService.GetUser(UserID);
return user;
}
}
notó las líneas de comentarios de código?
hago registrar el aglutinante en Global.asax
como
ModelBinders.Binders[typeof(User)] = new UserModelBinder();
Así que no puedo realmente hacer la inyección a través de la construcción.
UserDataService
tiene una cadena de dependencias: UserDataService -> UserRepository -> Context
. Entonces sería bueno usar Ninject aquí.
El problema es que cuando elimino [Inject]
la declaración anterior userData
y trato de hacer que Ninject inserte el objeto como parámetro, no funciona por alguna razón: obtengo excepciones de referencia nula.
(Podría ser que UserDataService
no tiene una interfaz y estoy vinculante el objeto a sí mismo: kernel.Bind<UserDataService>().ToSelf();
??)
tengo otra línea comentada en el código:
userDataService = DependencyResolver.Current
.GetService<UserDataService>();
Cuando no está descompuesto, la configuración funciona, obtengo los objetos correctos insertados, pero ahora dependemos de DependencyResolver y eso no es mucho mejor que decir userDataService = new UserDataService()
¿Me estoy perdiendo algo? ¿Hay alguna otra forma de inyectar un objeto como parámetro y no introducir la dependencia en Ninject o DependencyResolver?
¿La infección dices? – JConstantine
@JLevett: dependiendo de cómo inyecte esas dependencias, podrían infectarse :-) –
+1 solo por el "buen error tipográfico del día" :-) –