Inyección de Dependencias en Asp.Net Core (Sql, MySql, XML)
En este post vamos a aprender a realizar la Inyección de Dependencias (DI) y la Inversión de Control (IoC) en Asp.Net Core con Entity Framework. Usaremos un ejemplo práctico con acceso a datos para realizar la inyección de dependencias de Sql, MySql y Xml.
Inyección de Dependencias
La inyección de dependencias es uno de los principios SOLID, que consiste en usar interfaces en lugar de clases directamente para poder reemplazar componentes con más facilidad y hacer que una clase reciba referencias a los componentes que necesite para funcionar, en lugar de instanciarlos de forma directa.
Para llevar a cabo la inyección se declara la inversión de control en el container. En él instanciamos todas las dependencias necesarias para que la web funcione. En nuestro ejemplo práctico usaremos la inyección para cambiar fácilmente de un proveedor de datos a otros, sin tener que modificar nada más que una línea dentro de nuestro container.
Ejemplo práctico
En la primera parte del ejemplo estructuraremos el proyecto para poder acceder a una base de datos de Sql Server y mostrar una serie de películas. Una vez que todo el proyecto funcione, crearemos las clases necesarias para poder acceder a una base de datos de MySql y a un archivo XML.
Lo primero que necesitamos es instalar los NuGets que vamos a necesitar:
Empezamos creando nuestra estructura base del proyecto. Lo primero que necesitamos es nuestra clase Pelicula dentro de la carpeta Models, ya que será nuestra clase principal, la que usaremos para recoger o enviar datos (nuestro modelo).
Necesitamos una clase que enlace nuestro proyecto con nuestro acceso a datos de Sql Server: PruebasContext, que estará dentro de la carpeta Data, donde crearemos todas nuestras clases necesarias para otras conexiones. Esta clase heredará de DbContext e instanciará todas nuestras tablas como DbSet, teniendo que modificar la clase Pelicula para que pueda mapear las propiedades (columnas).
Inyección de Dependencias de Sql
Ahora que ya hemos creado nuestro PruebasContext, debemos incluirlo en StartUp.cs, nuestro container, para poder inyectarlo en las clases que lo necesiten.
A continuación creamos el repositorio de Sql, que tendrá dos métodos para acceder a nuestra tabla de la base de datos (PELICULAS). El repositorio de Sql necesita usar el PruebasContext para comunicarse con la base de datos, por lo que realizaremos nuestra primera inyección. En este caso crearemos, dentro de la carpeta Repositories, primero la interface IRepository y luego el repositorio de Sql RepositorySql, ya que queremos abstraernos para poder llevar a cabo la inyección de dependencias. Posteriormente incluiremos también estas clases en el StartUp.cs con Transient.
Por último configuramos los controladores y las vistas para poder mostrar los datos de las películas y posteriormente sus detalles. El controlador tendrá que inyectar el repositorio para poder llamar a esos métodos que acabamos de crear y poder devolver los modelos a las vistas.
Dependencias de MySql
Hasta ahora ya hemos utilizado la inyección de dependencias, pero vamos a añadir un ejemplo mucho más claro. Si quisiéramos cambiar nuestro proveedor de base de datos, por ejemplo MySql, según la estructura que tenemos actualmente, con la inyección de dependencias, solo tendríamos que crear nuestro RepositoryMySql, ya que no siempre la sintaxis es igual en todos los accesos a datos, y cambiar la implementación en el StartUp.cs. Simplemente comentamos las líneas necesarias para Sql y añadimos las necesarias para MySql.
Y comprobamos que simplemente cambiando esas líneas dentro de nuestro container podemos acceder desde cualquier clase que inyecte las dependencias sin tener que cambiarlas una a una.
Dependencias de XML
Por último crearemos el RepositoryXML, que también heredará de IRepository, y cambiaremos otra vez las líneas de nuestro container para poder acceder a datos de un archivo XML.
¡¡Y ya hemos aprendido a implementar la Inyección de Dependencias!! Ya tendríamos los componente necesarios para poder realizar acceso a datos con distintos proveedores.
Recuerda siempre instalar los NuGets necesarios para trabajar bien en tu proyecto, aunque no es obligatorio instalar lo que proponemos en este post. Esto es simplemente un ejemplo, pero hay muchas formas más de hacerlo al igual que puedes usar muchos otros NuGets. También recuerda que debes cambiar la cadena conexión por la que tú estés utilizando.
En el enlace a mi código de Git están los documentos con los script de Sql y MySql y también el archivo de XML.
Espero haberte ayudado y haber resuelto tus dudas con este post 🙂
Autora: Nazaret de la Calle Miján Curso: Desarrollo Web Full Stack, MultiCloud y Multiplataforma Centro: Tajamar Año académico: 2020-2021 Código de GitHub: Inyección de Dependencias con Asp.Net Core LinkedIn: Mi Perfil
Buen dia, gracias por tu video, me puedes ayudar, estoy comenzando a programa en este ambiente y he visto tu video, si me pudieras ayudar diciendo en que version de visual lo abro para poder revisar y saber mejor como funciona. Gracias por tu ayuda. saludos.