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:

NuGets2

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).

Pelicula

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).

PruebasContext
PeliculaMapeada

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.

StartUpContextSql

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.

IRepository
RepositorySql
StartUpRepositorySql

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.

9.HomeController
10.Index
Index.cshtml
11.Detalles
Detalles.cshtml
12.ListaPeliculasSQL
13.DetallesSQL

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.

14.RepositoryMySql
15.StartUpRepositoryMySql

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.

16.ListaPeliculasMySQL
17.DetallesMySQL

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.

18.RepositoryXML
19.StartUpRepositoryXML
20.ListaPeliculasXML
21.DetallesXML

¡¡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

This Post Has One Comment

  1. JESUS GARCIA FRAUSTO Reply

    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.

Leave a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.