Inyección de dependencias en ASP.NET con Ninject

Hola amigos. Después de ver en artículos anteriores varios aspectos de la inyección de dependencias en ASP.NET MVC usando el contenedor Unity, hoy empezaremos una nueva serie revisando los mismos aspectos que ya vimos con Unity, pero usando otro contenedor que es muy popular y bastante utilizado también que se llama Ninject. Entre las principales características es que es un componente de código abierto, y su objetivo básico es ser simple y fácil de usar en tus proyectos. Ninject también tiene una comunidad bastante amplia trabajando por mejorarlo, y existen bastantes extensiones que pueden ayudarnos a resolver necesidades específicas. No dudes en visitar su página para obtener más información.

Ahora, vamos al asunto de este artículo: el objetivo será crear una solución de código ASP.NET MVC que utilice Ninject como contenedor de inyección de dependencias. El ejemplo será muy similar al que construimos en el primer artículo de la serie de Unity.

Iniciaremos por crear un proyecto de código ASP.NET MVC, y adicionaremos el paquete Ninject.MVC5 usando el Nuget Package Manager.

ninjectdemo_01

Una vez instalado, vamos a comenzar a adicionar el código que necesitamos para el ejemplo. Lo primero será la interface y la clase concreta para un “repositorio” que simularemos. Si bien en este ejemplo tendrán unos valores fijos, en nuestros proyectos los repositorios pueden acceder a información de diferentes fuentes como servicios web, bases de datos, archivos, etc.

public interface INumberRepository
{
    IList<int> GetNumbers();
}
public class NumberRepository : INumberRepository
{
    public IList<int> GetNumbers()
    {
        return new List<int> { 1, 2, 3, 4, 5 };
    }
}

Ahora, adicionaremos un controlador MVC, con dos características: tendremos una variable interna del tipo de la interface INumberRepository que creamos anteriormente, y un constructor que recibirá un parámetro que es también del tipo de la interface INumberRepository.El código del controlador queda de la siguiente manera:

public class NumbersController : Controller
{
    private readonly INumberRepository numbersRepo;
 
    public NumbersController(INumberRepository repo)
    {
        numbersRepo = repo;
    }
 
    // GET: Numbers
    public ActionResult Index()
    {
        IList<int> numbers = numbersRepo.GetNumbers();
        return View(numbers);
    }
}

El próximo paso es crear una vista para mostrar el resultado del código que está en el controlador. No incluiré acá el código de la vista, pero puedes verlo en el enlace que está al final del post con el código fuente del ejemplo usado.

La idea con el controlador que creamos, es que el contenedor de inyección de dependencias Ninject haga una inyección por constructor del tipo de repositorio que nosotros queremos. El último paso es entonces configurar las dependencias para que Ninject pueda inyectar las clases adecuadamente en el momento en que sean requeridas. Para hacer eso, modificaremos el código del método RegisterServices que se encuentra en la clase NinjectWebCommon de la carpeta App_Start en el proyecto ASP.NET MVC (el archivo NinjectWebCommon.cs es creado por el paquete Ninject.MVC5 que adicionamos en Nuget anteriormente). El código debe verse así:

private static void RegisterServices(IKernel kernel)
{
    // Usar la clase NumberRepository cuando se encuentre
    // la interface INumberRepository
    kernel.Bind<INumberRepository>().To<NumberRepository>();
}

Ahora ejecutamos el sitio web en un navegador, y podremos ver el resultado de la inyección de dependencias con Ninject en acción!

ninjectdemo_02

Hasta acá llegamos con este ejemplo. Espero que les haya sido útil, y en próximos artículos exploraremos cómo se pueden hacer otras cosas como la inyección de propiedades que ya vimos usando Unity. Si tienes inquietudes o comentarios de este post, no dudes en compartirlos!

Puedes descargar el código fuente de este artículo en mi repositorio de GitHub.

ironcat

Anuncios

3 Responses to Inyección de dependencias en ASP.NET con Ninject

  1. Pingback: Inyección de propiedades en ASP.NET MVC usando Ninject | hgr.net

  2. Pingback: Resolviendo dependencias nombradas en Ninject | hgr.net

  3. Pingback: Inyección de propiedades en ASP.NET MVC usando Ninject – Avanet

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: