ASP.NET MVC 3 proporciona un servicio de inyección de dependencias que se conectará a cualquier resolución de dependencia que elija implementar. El plugin Ninject MVC 3 es muy simple en su función porque todo lo que debe hacer es implementar los métodos de resolución de tipo definidos en System.Web.Mvc.IDependencyResolver y llamar a los métodos Ninject apropiados para devolver un tipo solicitado.
Si elige usar su propio IDependencyResolver y asociarlo a Ninject (o cualquier otro marco de inyección de dependencia), o elige usar el complemento Ninject MVC 3 disponible gratuitamente, es una distinción trivial.
Aquí hay un ejemplo completamente funcional de cómo podría verse un IDependenResolver enrollado a mano, compatible con Ninject. El plug-in de Ninject MVC 3 sería fundamentalmente muy similar:
public class NinjectDependencyResolver : IDependencyResolver
{
private readonly IKernel _kernel;
public NinjectDependencyResolver(IKernel kernel) {
_kernel = kernel;
}
public object GetService(Type serviceType) {
return _kernel.TryGet(serviceType, new IParameter[0]);
}
public IEnumerable<object> GetServices(Type serviceType) {
return _kernel.GetAll(serviceType, new IParameter[0]);
}
}
El punto clave aquí es que ASP.NET MVC no proporciona un marco de inyección de dependencias de pleno derecho; proporciona solo la capa necesaria para recuperar una instancia de tipo requerida por medio de un contenedor IoC (es decir, Ninject) en puntos específicos a lo largo de la canalización de solicitudes ASP.NET MVC (resolución del controlador, resolución de vista, etc.).
Nota: si alguno de los términos que utilicé no es del todo exacto, infórmenme.
@Remo Gloor - ¿Cuál es la diferencia entre la extensión Web.MVc y Ninject.MVC3? – chobo2
Es lo mismo. Guardábamos el nombre del paquete NuGet Ninject.MVC3 como existía antes. –
@ Remo Gloor - Entonces, ¿es lo mismo entonces? – chobo2