Aplicación del Principio de Inversión de Dependencias en C#
Clase 14 de 16 • Curso de Principios SOLID en C# y .NET
Contenido del curso
Clase 14 de 16 • Curso de Principios SOLID en C# y .NET
Contenido del curso
Cristian David Boada Padilla
Karol Castañeda
Jose Alberto Zavala Flores
Luis Sandoval
Víctor Eusebio Olvera Thomé
Thomas Isaid Castro Navarro
Sergio Sanchez
Miguel Teheran
Azkael Galeano
Miguel Teheran
David Dzul
Pablo Andres Muñoz Martinez
Andres Felipe Zuleta Granados
Oscar Daniel Juárez Cruz
Miguel Teheran
Leonardo Valdivieso
Miguel Teheran
ROMMEL DUAREZ SAENZ
Mario César Enríquez Arones
José Ángel Soriano Soriano
Carlos Gomez
Miguel Teheran
Sergio Franco
Sergio Franco
Hector Lopez
Olga Berenice Hernández Cruz
ANDRÉS GUERRERO BETANCUR
Esta deberia ser la parte uno y la otra la parte dos
Gracias por comentarlo, ya lo hemos puesto en el orden correcto!
Hola Karol, aún está en el orden incorrecto. En el orden numérico del curso: El 14 es la segunda parte. El 15 es la primera parte.
Saludos.
Para las versiones de .NET Core y .NET para agregar los servicios, se usa el incluido nativamente por Microsoft, pero tambien hay otros nugets como Autofact: https://autofac.org/
La mejor explicación que he visto de inyección de dependencias.
Este video es: Aplicando el principio de inversión de la dependencia - Parte I
A parte de ser una buena practica, por que usar Interfaces aca es bueno? que ventajas trae?
Demasiadas ventajas:
En que curso puedo aprender lo de los Servicios, AddScoped, AddTrascent, etc? (min 11:52)
Esto lo vemos en el curso de APIs con .NET ya que esos metodos vienen por defecto en ASP .NET
usualmente me ha tocado trabajar con inyección de dependencias en algunos proyectos y en la mayoria cuando vamos declaramos los tipos interfaces las declaramos como privadas y el nombre en este caso logbook por ejemplo lo manejamos comos _logbook.
Quedando en el constructor como _logbook = log ... en un caso como el que yo he visto quedaría _logbook = logbook.
Esto es solo un comment
la parte uno esta mal, esta en el lugar 15, debe estar en la 14
Ya está en el orden correcto, gracias !!!
Creo que este video va a antes del 14. ¿Será eso cierto?
Excelente curso por cierto, muy preciso y los ejemplos bastante buenos!!!
Gracias por reportarlo
Si tengo dos implementaciones de la misma interfaz para Produccion, dependiendo del controlador que uso., cómo lo puedo registrar en > Program.cs
Lo mejor es utiliar el principio de segrecion de interfaces para solucionar el problema y tener un iderntificador unico para cada implementación:
public interface IService { } public interface IServiceA: IService {} public interface IServiceB: IService {} public class ServiceA: IServiceA {} public class ServiceB: IServiceB {}
entiendo que para solucionar la ambiguedad cada implementación debe tener una única Interfaz
El orden de las partes está mal, esta es el 14 y la anterior la 15
Hola Karol, aún está en el orden incorrecto. En el orden numérico del curso: El 14 es la segunda parte. El 15 es la primera parte.
sigue el problema
Tengo este problema, alguna solución ?
Debes instalar ambas librerias, si ya las tienes instaladas usa el comando dotnet restore, muchas veces visual code no toma bien las referencias entocnes cerrar y abrir si es el caso.
para los que aún tienen dudas o no queda claro el tema de inversión:public interface ICerveza { void Producir(); }
El ejemplo de la cerveza:
la interfaz (contrato de implementación) indica lo que cada clase que quiera obtener una cerveza debe tener (propiedades y/o metodos):
public interface ICerveza { void Producir(); } ```luego, quieres implementar una cerveza, ejemplo Pilsen.  se defina la clase que implementa la interfaz :  ```js public class CervezaPilsen : ICerveza { public void Producir() { Console.WriteLine("Produciendo cerveza Pilsen."); } } ```luego, la cerveceria (otra clase,controlador,etc) quiere llevar a producción la cerveza, pero no requiere realizar nuevamente todo el proceso previo (creación de cerveza individual (ya que si se creara otro tipo de cerveza con otras propiedas, se deberia modificar toda la implementación)). por lo cual, mediante el uso de inyección de dependencia, se generaliza el proceso de producción, inyectando (introduciendo desde afuera (valga el pleonasmo)) el proceso de producción especifico para cada cerveza: ```js public class Cervecera { private readonly ICerveza cerveza; public Cervecera(ICerveza cerveza) { this.cerveza = cerveza; } public void IniciarProduccion() { Console.WriteLine("Iniciando producción..."); cerveza.Producir(); } }
esto, elimina la responsabilidad del controlador o clase especifica de realizar tareas que no le compente ( crear la cerveza pilsen ) para luego llevarla a producción.
Espero sirva, o me rectifiquen en caso contrario. Gracias.
dado que la clase cervecera, solo acepta datos de tipo ICerveza, le es trasparente la configuración interna de cada tipo de cerveza. esto, elimina la "dependencia" de esta implementación. (por ello el concepto de "inversión de dependencia" )
En la inyección de dependencia de .NET hay tres duraciones principales:
Singleton: su duración es desde que se ejecuta la aplicación hasta que se tenga, mantiene el estado durante todo el ciclo de vida de la aplicación:
Scope: Se crea una instancia para cada solicitud HTTP, pero usa la misma instancia en las otras llamadas dentro de la misma solicitud web.
Transient: Los servicios transitorios se crean cada vez que se haga una instancia, en una misma solicitud http puede cambiar cada vez que se haga una instancia.
Me sale este error al querer reproducir esta clase:
Holaa, tengo este error:
Determinando los proyectos que se van a restaurar... Todos los proyectos están actualizados para la restauración. D:\ANDRES\Documents\GitHub\curso-principios-solid-csharp\5-DependencyInversion\Api\Program.cs(3,5): error CS1002: Se esperaba ; [D:\ANDRES\Docume nts\GitHub\curso-principios-solid-csharp\5-DependencyInversion\Api\DependencyInversion.csproj] ERROR al compilar. D:\ANDRES\Documents\GitHub\curso-principios-solid-csharp\5-DependencyInversion\Api\Program.cs(3,5): error CS1002: Se esperaba ; [D:\ANDRES\Docume nts\GitHub\curso-principios-solid-csharp\5-DependencyInversion\Api\DependencyInversion.csproj] 0 Advertencia(s) 1 Errores ``` Determinando los proyectos que se van a restaurar...   Todos los proyectos están actualizados para la restauración. D:\ANDRES\Documents\GitHub\curso-principios-solid-csharp\5-DependencyInversion\Api\Program.cs(3,5): error CS1002: Se esperaba ; \[D:\ANDRES\Docume nts\GitHub\curso-principios-solid-csharp\5-DependencyInversion\Api\DependencyInversion.csproj] ERROR al compilar. D:\ANDRES\Documents\GitHub\curso-principios-solid-csharp\5-DependencyInversion\Api\Program.cs(3,5): error CS1002: Se esperaba ; \[D:\ANDRES\Docume  nts\GitHub\curso-principios-solid-csharp\5-DependencyInversion\Api\DependencyInversion.csproj]   0 Advertencia(s)   1 Errores