De Angular a ASP.NET 6.0 gracias a la Inyección de Dependencias

Una comparación rápida entre un framework como Angular y .NET 6

hace 10 días   •   4 min de lectura

Por Andrés Tuñón

Ahora en mi trabajo tengo que realizar parte de backend, por lo tanto decidí hacer un pequeño proyecto en .NET 6 para empezar a familiarizarme y noté un patrón similar.

Único y detergente

Me aburre un poco tomar un backend, conectarlo a una base de datos y hacer un clásico CRUD, eso es muy obvio y clásico para mí. Si te interesa realizar justo eso, te dejo el tutorial al final.

La verdad siempre los backends que he conocido te guían bien en esa tarea, pero yo quiero algo más.. Me interesa conocer cómo funciona la inyección de dependencias y el patrón de repositorios acá.

¿Qué podemos rescatar de Angular y NestJS?

Hay un sistema modular que se encarga de encapsular y "contener" las dependencias; en otras palabras, hay un sistema inicial que provee esos módulos.

En el caso de un servicio en Angular, uno define un providedIn y le sueles definir 'root' para que este contenido en AppModule o en todo el proyecto.

un servicio en angular
Un servicio en angular

Hay un constructor en el que defines las dependencias que vas a utilizar, si no esta en un módulo padre te dará error.

Inyectando servicios
Inyectando servicios

De igual modo puedes utilizar servicios, dentro de otros servicios.

¿Qué es el patrón de repositorios?

Lo conocí con NestJS y no quiero indagar mucho en él; simplemente es dejar el CRUD (Create, Read, Update and Delete) en un servicio encargado de realizar las consultas a la base de datos y luego el controlador utiliza esos repositorios para proveer la información al cliente.

¿Qué tiene de interesante todo esto?

Todo el rato me he enfocado en servicios y eso es justo de lo que trata mi proyecto, como llamar servicios al controlador, utilizando inyección de dependencias en .NET 6.

El proyecto se llama GoodMorning y buscaba conocer la fecha actual consultando un servicio, como si lo estuviera haciendo en Angular (mas o menos ... )

Proyecto GoodMorning

(Repositorio al final)

Realicé mi primer hola mundo
Realicé mi primer hola mundo

Incluí 1 controlador, 1 modelo y 1 servicio. El controlador simplemente devuelve lo que me da el servicio y el servicio realiza un GET hacia un API público que me da la fecha actual dependiendo de la zona horaria que le envíe.

Controlador

Controlador
Controlador
  • Lo que dice Route(GoodMorning) y HttpGet("Time") son como los "decorators", también puedes meter middlewares del mismo modo.
  • La función que tiene el mismo nombre que la clase, es el encargado de inyectar las dependencias, en este caso dependo de TimeAPIService, el que me da la respuesta al servicio.
  • Dentro del GET del controlador hago la operación asíncrona y simplemente utilizo el servicio.

Servicio

Servicio
Servicio
  • Este es el servicio que realiza la llamada, depende de HttpClient y le seteo un BaseAddress, de igual modo como creo mis servicios para mis APIs.
  • Arriba esta una pequeña interfaz para posteriormente usarla al registrarla en el contenedor primario de dependencias.
Program.cs
Program.cs
  • Este es el Program.cs, es donde inicia todo .. como si fuera un AppModule.
  • Realmente toda esta base vino con el proyecto, solo debí registrar los servicios en la línea 12 y 13.

Como pueden apreciar, registré TimeAPI  como dependiente de HttpClient, me quedé como 2 días con el error:

"InvalidOperationException: Unable to resolve service for type 'GoodMorning.Services.TimeAPIService' while attempting to activate 'GoodMorning.Controllers.GoodMorningController'."

Hasta que mis neuronas reaccionaron y no entendía cómo el servicio podía hacer uso de HttpClient y fue como un ¡Eureka!

Bonus

Los lambdas function en C# son como los arrow functions en sintaxis, me queda investigar si el this funciona igual

Referencias

Tutorial: Create a web API with ASP.NET Core
Learn how to build a web API with ASP.NET Core.
Tutorial

Proyecto Completo

Good Morning
Estado Completado Descripción Es un API de un servicio, que ejemplifica cómo trabajar con servicios en .NET 6. Tecnologías y Librerías * ASP.NET 6 Aprendizaje Uso de .NET 6 Patrón de inyección de dependencias (Artículo) Repositorio GitHub - ngxCoder/GoodMorningContribute to ngxCo…

Corre la voz