CursosEmpresasBlogLiveConfPrecios

Inyección de dependencias

Clase 13 de 22 • Curso de APIs con .NET

Clase anteriorSiguiente clase

Contenido del curso

Introducción a API en .NET
  • 1
    Domina las API con .NET

    Domina las API con .NET

    02:50
  • 2
    Prerrequisitos

    Prerrequisitos

    02:36
  • 3
    ¿Qué es una API?

    ¿Qué es una API?

    04:22
  • 4
    ¿Qué es REST?

    ¿Qué es REST?

    08:18
  • 5
    Creando tu primera API con .NET

    Creando tu primera API con .NET

    04:04
Funcionamiento de una API en .NET
  • 6
    Consumiendo API desde Postman

    Consumiendo API desde Postman

    05:33
  • 7
    Análisis del template para APIs de .NET

    Análisis del template para APIs de .NET

    10:51
  • 8
    Atributos para verbos HTTP

    Atributos para verbos HTTP

    14:56
  • 9
    Manejo de rutas

    Manejo de rutas

    09:51
  • 10
    Minimal API vs. Web API

    Minimal API vs. Web API

    08:36
Arquitectura y configuración
  • 11
    ¿Qué son los middlewares?

    ¿Qué son los middlewares?

    08:54
  • 12
    Creando un nuevo middleware

    Creando un nuevo middleware

    14:46
  • 13
    Inyección de dependencias

    Inyección de dependencias

    16:43
  • 14
    Agregando Logging a API

    Agregando Logging a API

    09:25
  • 15
    Documentando API con Swagger

    Documentando API con Swagger

    08:03
Manipulación de datos con Entity Framework
  • 16
    Agregando librerías para Entity Framework

    Agregando librerías para Entity Framework

    04:38
  • 17
    Configuración de Entity framework y clases base

    Configuración de Entity framework y clases base

    08:31
  • 18
    Creación de servicios

    Creación de servicios

    12:24
  • 19
    Inyectando servicios como dependencia

    Inyectando servicios como dependencia

    04:43
  • 20
    Creando controladores

    Creando controladores

    11:32
  • 21
    Probando API con una base de datos SQL server

    Probando API con una base de datos SQL server

    14:03
Outro
  • 22
    Retrospectiva: APIs con .NET

    Retrospectiva: APIs con .NET

    03:05
    Edwin Estacio Bermeo

    Edwin Estacio Bermeo

    student•
    hace 3 años

    Sería más oportuno para el curso explicar con gráficos o imágenes representativas de lo que significa las tres formas de inyección de dependencia como Freddy lo hace en las clases de programación para tener una representación visual más clara del alcance que tiene cada una.

    InyeccionDependencia2.PNG
    InyeccionDependencia1.PNG
    InyeccionDependencia3.PNG

      Edgar Roy Huaman Pumachapi

      Edgar Roy Huaman Pumachapi

      student•
      hace 2 años

      Muy Buen aporte. Estimado. Hay conceptos que se estan asi por asi.

      FELIX EVR

      FELIX EVR

      student•
      hace 2 años

      Edwin puedes proporcionar el enlace del curso de Freddy que mencionas? Gran aporte!

      Saludos

    Luis Angel Cruz Ruiz

    Luis Angel Cruz Ruiz

    student•
    hace 3 años

    -AddScoped crea una instancia por cada request del cliente -AddTransient crea una instancia por cada controlador -AddSingelton crea una sola instancia para todo lo que dure la ejecución de la API.

    Luis G. Julio

    Luis G. Julio

    student•
    hace 3 años

    Transient vs Scoped vs Singleton

    Les dejo una explicación muy interesante :D

    https://www.youtube.com/watch?v=srPGwwMwAoA&ab_channel=hdeleon.net

      Diego Fernando Pallares Ramirez

      Diego Fernando Pallares Ramirez

      student•
      hace 3 años

      Esta bueno, Hdeleon cervezas siempre es confiable, pero la idea es que esto lo expliquen acá, :/

      JUAN PABLO MAYORGA MENDIETA

      JUAN PABLO MAYORGA MENDIETA

      student•
      hace 2 años

      Es un buen referente y tiene muy buenos video Hector de Leon, muchas gracias por tu aporte :beer

    Andrea Ruíz

    Andrea Ruíz

    student•
    hace 3 años

    Estoy haciendo el curso usando NET 5 y si hay sus cositas diferentes en el startup.cs

      Leandro Andres Suarez Vece

      Leandro Andres Suarez Vece

      student•
      hace 3 años

      Claro, desde el Net 6 ya no se usa startup.cs. si no me equivoco.

    Natalia Jaramillo González

    Natalia Jaramillo González

    student•
    hace 2 años

    Inyección de Dependencias

    Nos permite utilizar diferentes tipos abstractos y configurar nuestras dependencias utilizando un inyector sin tener que crear un nuevo objeto o una nueva referencia del componente cada vez que lo necesitemos, sino que el inyector se encarga de pasarnos esa dependencia y la podemos utilizar directamente. Configuración del inyector: Para la configuración del inyector tenemos las siguientes opciones:

    1. Usando builder.Services.addscop<>(); : De esta manera estamos creando una nueva instancia de la dependencia que estamos usando, pero a nivel de controlador o a nivel de clase, es decir que no importa si estamos inyectando varias veces y en diferentes partes esta dependencia dentro de todo el contexto del controlador o todo el contexto de la clase, se va a inyectar exactamente la misma instancia que se creo para todo ese elemento. (También podemos usar builder.Services.addTrasient)
    2. Usando builder.Services.addsingleton : De esta manera estamos creando UNA ÚNICA implementación o instancia de esa dependencia EN TODA LA API (no es recomendable usar singleton porque hacemos que nuestras dependencias se creen en memoria lo que podría causar un problema, además la tendencia es implementar APIS que sean stateless que no manejen ningún tipo de estado sino que con cada request se cree una nueva implementación o instancia de la dependencia configurada.)
    Franklin Gil

    Franklin Gil

    student•
    hace 3 años

    Creo que lo que entendei de AddScoped y AddSingleton es que AddSingleton crea 1 contexto para todos los controladores y el AddScoped crea un contexto para cada uno de los controladores.

    Y cuando dice que una api tienes que ser State Less, quiere decir que las peticiones HTTP no deberian compartir informacion y que cada peticion HTTP sea decentralizada. Es decir, que si manejo un estado en /users ese estado no debe estar en /products

    Facundo Oubel

    Facundo Oubel

    student•
    hace 3 años

    Otra cosa que me llamó la atencion es que al principio cuando agrega el método GetHelloWorld2() a la clase HelloWorldService, todavía no estaba implementando a interfaz y ya estaba tirando error, pensé... capaz se implementa de forma implícita, pero no tiene sentido la verdad.

      Miguel Teheran

      Miguel Teheran

      teacher•
      hace 3 años

      El error no es por eso. Se debe a que el método no esta retornando nada, no te dejes guiar los los errores que marca el editor siempre analiza el comportamiento del código y ejecuta dotnet build para saber que esta pasando.

      Facundo Oubel

      Facundo Oubel

      student•
      hace 3 años

      Usted es un gran profesor, gracias.

    Mauricio Tabares

    Mauricio Tabares

    student•
    hace 3 años

    La verdad por más que lo intenté no fui capaz de hacerlo funcionar... No me funcionó está instrucción. builder.Services.AddScoped<IHelloworldService, HelloworldService>();

    Post: soy programador python y me está costando mucho.

      Miguel Teheran

      Miguel Teheran

      teacher•
      hace 3 años

      Hola MAuricio no te preocupes, puedes por favor compartir del error? depronto no tienes implementada en la clase HellowordService la interface de IHelloworldService

      Luis Angel Peña garcia

      Luis Angel Peña garcia

      student•
      hace 9 meses
    Luis Angel Cruz Ruiz

    Luis Angel Cruz Ruiz

    student•
    hace 3 años

    La inyección de dependencias puede entenderse de mejor manera si se conocen los principios SOLID. También es necesario saber manejar interfaces. Si tienen dudas sobre de clase, les recomendaría que acudan a estudiarlos.

    Cayo Legal

    Cayo Legal

    student•
    hace 3 años

    Por que es necesaria una interfaz para aplicar la inyección de dependencia? Que pasaría si no la ponemos?

      Miguel Teheran

      Miguel Teheran

      teacher•
      hace 3 años

      Recuerda que si no usas tipos abstractos te toca tocaria cambiar todos los tipos si necesitas reemplazarlo en cambio con una interfaz solo debees cambiar la implementación sin alterar el código. Por ejemplo:

      public class ServicioAzure public class ServicioAWS

      Si te toca cambiar de Azure a AWS por un requerimiento te toca ir y cambiar todo el codigo que use ese servicio y renombrar de ServicioAzure a ServicioAWS en cambio si usas interfaces

      interface IServicioNube public class ServicioAzure : IServicioNube public class ServicioAWS: IServicioNube

      Simplemente ambos servicios implementan la misma interfaz y tu código depende de un componente generico llamado IServicioNube que puede tener multiples implementaciones.

      Las interfaces son necesarias para poder aplicar patrones de diseño y lograr hacer pruebas unitarias

      Javier Sevillano

      Javier Sevillano

      student•
      hace 3 años

      Hola Miguel. Puedo entender que la inyección de dependencia hace que una clase no implemente un objeto de una clase específica sino que implemente la inferfaz, como en el ejemplo que mencionas.

      Esto se debería de usar en todas las clases donde estemos implementando otras clases adentro, pero si tengo una api de un sistema grande, donde hayan muchísimas clases donde varias de ellas implementen otras clases, se volvería algo muy grande.

    Eduardo Lemus Zavala

    Eduardo Lemus Zavala

    student•
    hace 3 años

    Si quiero hacer este proyecto pero desde visual studio que tipo de proyecto debo escoger? tengo muchos problemas con visual studio code a pesar de q ya agregue las extensiones.

      Miguel Teheran

      Miguel Teheran

      teacher•
      hace 3 años

      Si claro no te preocupes, escoges el proyecto de ASP .NET con .NET Core y especificas que es para una API.

    Rodolfo Maximo Hernández

    Rodolfo Maximo Hernández

    student•
    hace 3 años

    Creo que falto más explicación en el tema de las diferentes formas de inyectar nuestras dependenencias y ¿Cuándo usar Singleton, Scoped o Transient?

      Miguel Teheran

      Miguel Teheran

      teacher•
      hace 3 años

      Aca va un resumen: Singleton: Se usa muy poco, mas que todo cuando se necesita que la clase tenga una única instancia compartida en toda la aplicación (en la API) Scoped: es el mas usado y se utiliza por cada sesión de usuario, es decir por cada request, garantizando una nueva instancia de cada dependencia Transient: Es usado en escenarios donde queremos una full stateless, garantizamos que incluso para el mismo request del usuario se cree una nueva instancia

    Alejandro Claver Valencia

    Alejandro Claver Valencia

    student•
    hace 3 años

    Buenas noches. Dónde puedo obtener el código completo de los ejemplos que se hicieron en el curso ?

      Miguel Teheran

      Miguel Teheran

      teacher•
      hace 3 años

      Aca esta el repo https://github.com/platzi/curso-apis-net

    Andrés Esteban Rodríguez Jiménez

    Andrés Esteban Rodríguez Jiménez

    student•
    hace 2 años

    Dependency Injection

    Dependency injection is a fundamental concept in object-oriented programming (OOP) languages. It allows us to manage dependencies in our code effectively, making it easier to maintain and test. Let's dive into how it works and how to implement it in C#.

    Understanding Dependency Injection

    Dependency injection is all about decoupling components in your codebase. Instead of directly creating instances of dependencies within a class or controller, we rely on an injector to provide these dependencies when needed. This promotes a more modular and flexible code structure.

    Implementation Steps

    1. Create a Service

    Start by creating a service class that encapsulates the functionality you need. This service should implement an interface, which defines the contract for how the service can be used.

    namespace apidotnet.Services { // Define the interface public interface IHelloWorldService { string GetHelloWorld(); }

    // Implement the service public class HelloWorldService : IHelloWorldService { public string GetHelloWorld() { return "Hello world"; } } }

    2. Configure Dependency Injection

    Next, configure the dependency injection container to associate the interface with its corresponding implementation.

    using apidotnet.Services; using Microsoft.Extensions.DependencyInjection;

    // Configure services in Program.cs public class Program { public static void Main(string[] args) { var builder = WebApplication.CreateBuilder(args);

    // Configure dependency injection builder.Services.AddScoped<IHelloWorldService, HelloWorldService>();

    var app = builder.Build(); // Additional setup... app.Run(); } }

    3. Utilize Dependency in Controller

    Now, let's create a controller that utilizes the dependency injected through its constructor.

    using apidotnet.Services; using Microsoft.AspNetCore.Mvc;

    namespace apidotnet.Controllers { [ApiController] [Route("[controller]")] public class HelloWorldController : ControllerBase { private readonly IHelloWorldService _helloWorldService;

    // Inject the service through constructor public HelloWorldController(IHelloWorldService helloWorldService) { _helloWorldService = helloWorldService; }

    // Endpoint to get hello world message [HttpGet] public IActionResult Get() { return Ok(_helloWorldService.GetHelloWorld()); } } }

    Conclusion

    And there you have it! By implementing dependency injection, we've achieved a more modular and maintainable codebase. Remember, dependency injection is a powerful tool in your programming arsenal, so use it wisely to improve the structure and flexibility of your applications.

    cromero207

    cromero207

    student•
    hace 4 años

    ¿Me pueden aclarar por qué en este video dice que arrojó error al intercalar las instrucciones del middleware si en el video anterior muestran que funcionó?

      Miguel Teheran

      Miguel Teheran

      teacher•
      hace 4 años

      Es por que el middleware estaba afectando todas las URLs de la API, no tiene un filtro y por eso se debió remover.

      Marcos Avila Rodriguez

      Marcos Avila Rodriguez

      student•
      hace 4 años

      Al realizar la ultima prueba arroja error en la consola, el request se completa y en mi caso recibí un código 200 pero con el cuerpo en blanco, sin la hora..

    Carlyle Komalram

    Carlyle Komalram

    student•
    hace 3 años

    Singleton

    Joan Alexander Valerio Rodríguez

    Joan Alexander Valerio Rodríguez

    student•
    hace 3 meses

    Importante hacer la inyección de servicios antes de la inyección la inyección de controladores. Esto para evitar errores al momento de consultar el API.

    Agustin Emilio Alcantara Corporan

    Agustin Emilio Alcantara Corporan

    student•
    hace 3 años

    Diferencia entre AddTransient y AddScoped ?

      Miguel Teheran

      Miguel Teheran

      teacher•
      hace 3 años

      AddScoped usa la misma referencia para todo e contexto del elemento por ejemplo del controlador si recibes la dependencia por parámetro o en el constructor con Scope va ser la misma (seria diferente para otros controladores o clases) mientras que con AddTransient seria diferente por cada uno.

    Sebastián Silva Hernández

    Sebastián Silva Hernández

    student•
    hace un año

    Como es que se esta pudiendo usar el controlador weatherforecast sin inyeccion de depedencia, que linea esta produciendo que se pueda utilizar?

    Y si es asi, la inyeccion de depedencia solo es cuando no hay una interfaz de por medio como con ese controlador de weatherforecast cierto?

    Iván Solís

    Iván Solís

    student•
    hace 3 años

    Se fue el audio abruptamente y no puedo volver a activarlo. Está todo activado en Windows, no sé qué pasó. ¿Alguién sabe como volver a activar el audio?

      Miguel Teheran

      Miguel Teheran

      teacher•
      hace 3 años

      Por fa reportalo al equipo tecnico de Platzi!

Escuelas

  • Desarrollo Web
    • Fundamentos del Desarrollo Web Profesional
    • Diseño y Desarrollo Frontend
    • Desarrollo Frontend con JavaScript
    • Desarrollo Frontend con Vue.js
    • Desarrollo Frontend con Angular
    • Desarrollo Frontend con React.js
    • Desarrollo Backend con Node.js
    • Desarrollo Backend con Python
    • Desarrollo Backend con Java
    • Desarrollo Backend con PHP
    • Desarrollo Backend con Ruby
    • Bases de Datos para Web
    • Seguridad Web & API
    • Testing Automatizado y QA para Web
    • Arquitecturas Web Modernas y Escalabilidad
    • DevOps y Cloud para Desarrolladores Web
  • English Academy
    • Inglés Básico A1
    • Inglés Básico A2
    • Inglés Intermedio B1
    • Inglés Intermedio Alto B2
    • Inglés Avanzado C1
    • Inglés para Propósitos Específicos
    • Inglés de Negocios
  • Marketing Digital
    • Fundamentos de Marketing Digital
    • Marketing de Contenidos y Redacción Persuasiva
    • SEO y Posicionamiento Web
    • Social Media Marketing y Community Management
    • Publicidad Digital y Paid Media
    • Analítica Digital y Optimización (CRO)
    • Estrategia de Marketing y Growth
    • Marketing de Marca y Comunicación Estratégica
    • Marketing para E-commerce
    • Marketing B2B
    • Inteligencia Artificial Aplicada al Marketing
    • Automatización del Marketing
    • Marca Personal y Marketing Freelance
    • Ventas y Experiencia del Cliente
    • Creación de Contenido para Redes Sociales
  • Inteligencia Artificial y Data Science
    • Fundamentos de Data Science y AI
    • Análisis y Visualización de Datos
    • Machine Learning y Deep Learning
    • Data Engineer
    • Inteligencia Artificial para la Productividad
    • Desarrollo de Aplicaciones con IA
    • AI Software Engineer
  • Ciberseguridad
    • Fundamentos de Ciberseguridad
    • Hacking Ético y Pentesting (Red Team)
    • Análisis de Malware e Ingeniería Forense
    • Seguridad Defensiva y Cumplimiento (Blue Team)
    • Ciberseguridad Estratégica
  • Liderazgo y Habilidades Blandas
    • Fundamentos de Habilidades Profesionales
    • Liderazgo y Gestión de Equipos
    • Comunicación Avanzada y Oratoria
    • Negociación y Resolución de Conflictos
    • Inteligencia Emocional y Autogestión
    • Productividad y Herramientas Digitales
    • Gestión de Proyectos y Metodologías Ágiles
    • Desarrollo de Carrera y Marca Personal
    • Diversidad, Inclusión y Entorno Laboral Saludable
    • Filosofía y Estrategia para Líderes
  • Diseño de Producto y UX
    • Fundamentos de Diseño UX/UI
    • Investigación de Usuarios (UX Research)
    • Arquitectura de Información y Usabilidad
    • Diseño de Interfaces y Prototipado (UI Design)
    • Sistemas de Diseño y DesignOps
    • Redacción UX (UX Writing)
    • Creatividad e Innovación en Diseño
    • Diseño Accesible e Inclusivo
    • Diseño Asistido por Inteligencia Artificial
    • Gestión de Producto y Liderazgo en Diseño
    • Diseño de Interacciones Emergentes (VUI/VR)
    • Desarrollo Web para Diseñadores
    • Diseño y Prototipado No-Code
  • Contenido Audiovisual
    • Fundamentos de Producción Audiovisual
    • Producción de Video para Plataformas Digitales
    • Producción de Audio y Podcast
    • Fotografía y Diseño Gráfico para Contenido Digital
    • Motion Graphics y Animación
    • Contenido Interactivo y Realidad Aumentada
    • Estrategia, Marketing y Monetización de Contenidos
  • Desarrollo Móvil
    • Fundamentos de Desarrollo Móvil
    • Desarrollo Nativo Android con Kotlin
    • Desarrollo Nativo iOS con Swift
    • Desarrollo Multiplataforma con React Native
    • Desarrollo Multiplataforma con Flutter
    • Arquitectura y Patrones de Diseño Móvil
    • Integración de APIs y Persistencia Móvil
    • Testing y Despliegue en Móvil
    • Diseño UX/UI para Móviles
  • Diseño Gráfico y Arte Digital
    • Fundamentos del Diseño Gráfico y Digital
    • Diseño de Identidad Visual y Branding
    • Ilustración Digital y Arte Conceptual
    • Diseño Editorial y de Empaques
    • Motion Graphics y Animación 3D
    • Diseño Gráfico Asistido por Inteligencia Artificial
    • Creatividad e Innovación en Diseño
  • Programación
    • Fundamentos de Programación e Ingeniería de Software
    • Herramientas de IA para el trabajo
    • Matemáticas para Programación
    • Programación con Python
    • Programación con JavaScript
    • Programación con TypeScript
    • Programación Orientada a Objetos con Java
    • Desarrollo con C# y .NET
    • Programación con PHP
    • Programación con Go y Rust
    • Programación Móvil con Swift y Kotlin
    • Programación con C y C++
    • Administración Básica de Servidores Linux
  • Negocios
    • Fundamentos de Negocios y Emprendimiento
    • Estrategia y Crecimiento Empresarial
    • Finanzas Personales y Corporativas
    • Inversión en Mercados Financieros
    • Ventas, CRM y Experiencia del Cliente
    • Operaciones, Logística y E-commerce
    • Gestión de Proyectos y Metodologías Ágiles
    • Aspectos Legales y Cumplimiento
    • Habilidades Directivas y Crecimiento Profesional
    • Diversidad e Inclusión en el Entorno Laboral
    • Herramientas Digitales y Automatización para Negocios
  • Blockchain y Web3
    • Fundamentos de Blockchain y Web3
    • Desarrollo de Smart Contracts y dApps
    • Finanzas Descentralizadas (DeFi)
    • NFTs y Economía de Creadores
    • Seguridad Blockchain
    • Ecosistemas Blockchain Alternativos (No-EVM)
    • Producto, Marketing y Legal en Web3
  • Recursos Humanos
    • Fundamentos y Cultura Organizacional en RRHH
    • Atracción y Selección de Talento
    • Cultura y Employee Experience
    • Gestión y Desarrollo de Talento
    • Desarrollo y Evaluación de Liderazgo
    • Diversidad, Equidad e Inclusión
    • AI y Automatización en Recursos Humanos
    • Tecnología y Automatización en RRHH
  • Finanzas e Inversiones
    • Fundamentos de Finanzas Personales y Corporativas
    • Análisis y Valoración Financiera
    • Inversión y Mercados de Capitales
    • Finanzas Descentralizadas (DeFi) y Criptoactivos
    • Finanzas y Estrategia para Startups
    • Inteligencia Artificial Aplicada a Finanzas
    • Domina Excel
    • Financial Analyst
    • Conseguir trabajo en Finanzas e Inversiones
  • Startups
    • Fundamentos y Validación de Ideas
    • Estrategia de Negocio y Product-Market Fit
    • Desarrollo de Producto y Operaciones Lean
    • Finanzas, Legal y Fundraising
    • Marketing, Ventas y Growth para Startups
    • Cultura, Talento y Liderazgo
    • Finanzas y Operaciones en Ecommerce
    • Startups Web3 y Blockchain
    • Startups con Impacto Social
    • Expansión y Ecosistema Startup
  • Cloud Computing y DevOps
    • Fundamentos de Cloud y DevOps
    • Administración de Servidores Linux
    • Contenerización y Orquestación
    • Infraestructura como Código (IaC) y CI/CD
    • Amazon Web Services
    • Microsoft Azure
    • Serverless y Observabilidad
    • Certificaciones Cloud (Preparación)
    • Plataforma Cloud GCP

Platzi y comunidad

  • Platzi Business
  • Live Classes
  • Lanzamientos
  • Executive Program
  • Trabaja con nosotros
  • Podcast

Recursos

  • Manual de Marca

Soporte

  • Preguntas Frecuentes
  • Contáctanos

Legal

  • Términos y Condiciones
  • Privacidad
  • Tyc promociones
Reconocimientos
Reconocimientos
Logo reconocimientoTop 40 Mejores EdTech del mundo · 2024
Logo reconocimientoPrimera Startup Latina admitida en YC · 2014
Logo reconocimientoPrimera Startup EdTech · 2018
Logo reconocimientoCEO Ganador Medalla por la Educación T4 & HP · 2024
Logo reconocimientoCEO Mejor Emprendedor del año · 2024
De LATAM conpara el mundo
YoutubeInstagramLinkedInTikTokFacebookX (Twitter)Threads