Cómo usar Autofac en ASP.Net Core

La inyección de dependencia facilita el acoplamiento suelto y promueve la capacidad de prueba y el mantenimiento. ASP.Net Core proporciona soporte integrado para la inyección de dependencia (una especie de inversión de control) con un contenedor de inyección de dependencia minimalista. Sin embargo, el contenedor integrado carece de muchas de las características de una inyección de dependencia completa o inversión del contenedor de control.

Para superar esto, puede utilizar contenedores de terceros en ASP.Net Core. En otras palabras, puede reemplazar fácilmente el contenedor integrado con un contenedor de terceros. Autofac es un contenedor de inversión de control que se puede utilizar para resolver dependencias. Este artículo proporciona una discusión sobre cómo podemos trabajar con Autofac en ASP.Net Core.

Cree un proyecto ASP.Net Core en Visual Studio

Primero, creemos un proyecto ASP.Net Core en Visual Studio. Suponiendo que Visual Studio 2017 o Visual Studio 2019 esté instalado en su sistema, siga los pasos que se describen a continuación para crear un nuevo proyecto ASP.Net Core en Visual Studio.

  1. Inicie el IDE de Visual Studio.
  2. Haga clic en "Crear nuevo proyecto".
  3. En la ventana "Crear nuevo proyecto", seleccione "Aplicación web ASP.Net Core" de la lista de plantillas que se muestran.
  4. Haga clic en Siguiente.
  5. En la ventana "Configure su nuevo proyecto", especifique el nombre y la ubicación del nuevo proyecto.
  6. Haga clic en Crear.
  7. En la ventana "Crear nueva aplicación web ASP.Net Core", seleccione .Net Core como tiempo de ejecución y ASP.Net Core 2.2 (o posterior) de la lista desplegable en la parte superior.
  8. Seleccione "Aplicación web" como plantilla de proyecto. 
  9. Asegúrese de que las casillas de verificación "Habilitar compatibilidad con Docker" y "Configurar para HTTPS" no estén marcadas, ya que no usaremos esas funciones aquí.
  10. Asegúrese de que la autenticación esté configurada como "Sin autenticación", ya que tampoco usaremos autenticación.
  11. Haga clic en Crear.

Esto creará un nuevo proyecto ASP.Net Core en Visual Studio. Usaremos este proyecto en las secciones siguientes de este artículo para trabajar con Autofac.

Instale Autofac en su proyecto ASP.Net Core

Es fácil de instalar Autofac; puede instalarlo desde NuGet. En el momento de escribir este artículo, la versión actual de Autofac es 4.9.2. Para trabajar con Autofac, también debe instalar el paquete Autofac.Extensions.DependencyInjection. Esto asegurará que tenga instaladas las dependencias necesarias para trabajar con Autofac.

Seleccione el proyecto de aplicación web ASP.Net Core que creó anteriormente, luego haga clic con el botón derecho e instale Autofac.Extensions.DependencyInjection a través del Administrador de paquetes NuGet. Acepte los acuerdos de licencia que se le soliciten durante la instalación. Alternativamente, puede instalar este paquete ingresando el siguiente comando en la Consola del Administrador de paquetes NuGet:

Paquete de instalación Autofac.Extensions.DependencyInjection

Cree una clase en su aplicación ASP.Net Core

Para ilustrar la inyección de dependencia, necesitaremos algunos objetos con los que trabajar. Considere la interfaz IAuthorRepository que contiene la declaración del método GetMessage a continuación.

 interfaz pública IAuthorRepository

    {

        string GetMessage ();

    }

La clase AuthorRepository implementa la interfaz IAuthorRepository como se muestra a continuación.

 AuthorRepository de clase pública: IAuthorRepository

    {

        cadena pública GetMessage ()

        {

            return "Hola mundo";

        }

    }

Tenga en cuenta que esta es una implementación minimalista de un repositorio, es decir, no contiene los métodos CRUD que contiene un repositorio típico. Dejaré que usted implemente los métodos CRUD de manera apropiada.

Configurar Autofac en ASP.Net Core

Para configurar Autofac, debe especificar el código de configuración en el método ConfigureServices de la clase Startup. Tenga en cuenta que el método ConfigureServices se utiliza para agregar servicios en tiempo de ejecución al contenedor.

El primer paso es crear un constructor de contenedores para registrar los servicios necesarios con el contenedor Autofac. El primer paso es completar los servicios del marco utilizando el método Populate como se muestra a continuación.

var containerBuilder = new ContainerBuilder ();

containerBuilder.Populate (servicios);

El siguiente paso es registrar los servicios personalizados con Autofac. Para hacer esto, use el método RegisterType en la instancia del generador de contenedores como se muestra a continuación.

containerBuilder.RegisterType (). As ();

Para construir el contenedor, escriba el siguiente código.

var contenedor = containerBuilder.Build ();

return container.Resolve ();

Aquí está el código fuente completo del método ConfigureServices para su referencia:

public IServiceProvider ConfigureServices (servicios IServiceCollection)

   {

       services.AddMvc ();

       var containerBuilder = new ContainerBuilder ();

       containerBuilder.Populate (servicios);

       containerBuilder.RegisterType ().

       Como();

       var contenedor = containerBuilder.Build ();

       return container.Resolve ();

   }

Use Autofac en sus controladores en ASP.Net Core

Ahora que se ha instalado y configurado Autofac en su proyecto, puede comenzar a usarlo en sus controladores. El siguiente fragmento de código ilustra cómo puede resolver dependencias en ValuesController.

  ValuesController de clase pública: ControllerBase

  {

        private IAuthorRepository _authorRepository; 

        public ValuesController (IAuthorRepository authorRepository) 

        {

            _authorRepository = authorRepository;

        } // OBTENER api / valores

        [HttpGet]

        public ActionResult Get ()

        {

            return _authorRepository.GetMessage ();

        }

     // Otros métodos de acción

  }

El principio de inyección de dependencia es una realización de la inversión del principio de control. Es una técnica que se utiliza para eliminar dependencias de la implementación permitiéndole inyectar estas dependencias externamente. Los contenedores de inversión de control como Autofac aprovechan la inyección de dependencia para invertir el flujo de control y ayudar a automatizar la creación de instancias y la gestión del ciclo de vida de los objetos.

La inyección de dependencia tiene tres formas: inyección de constructor, inyección de interfaz e inyección de propiedad. En este ejemplo, usamos la inyección del constructor para inyectar una dependencia, es decir, una instancia del tipo AuthorRepository, en tiempo de ejecución en la clase ValuesController.

Hemos visto cómo se puede usar Autofac para reemplazar el contenedor de inyección de dependencia predeterminado en ASP.Net Core, pero solo hemos arañado la superficie de sus capacidades. Exploraré Autofac con más profundidad en futuras publicaciones aquí.