https://d226lax1qjow5r.cloudfront.net/blog/blogposts/simplifying-dependency-injection-in-dotnet/simplifying-dependency-injection.png

Simplificación de la inyección de dependencias en .NET

Publicado el October 24, 2023

Tiempo de lectura: 1 minuto

Hola, compañeros desarrolladores.

Tenemos novedades interesantes que compartir sobre nuestro SDK .NET. Acabamos de lanzar una nueva y fantástica función que le hará la vida mucho más fácil. ¿Sabes que inicializar el cliente solía ser un poco pesado? Pues no temas más.

Desde la versión v6.4.0hemos integrado una solución que facilita el proceso. Ahora, puede utilizar un método de extensión para registrar nuestro cliente en el contenedor de inyección de dependencias predeterminado de ASP.NET. ¿Le interesa? Siga leyendo para obtener más información.

Inicialización estándar del cliente

Imaginemos que queremos utilizar Meetings API de Meetings. Tendríamos que inicializar una instancia del cliente principal (VonageClient) para obtener el archivo MeetingsClient.

Credentials credentials = ...
VonageClient vonageClient = new VonageClient(credentials);
IMeetingsClient meetingsClient = vonageClient.MeetingsClient;

De hecho, es bastante sencillo, ya que el cliente sólo espera que se cree un objeto Credentials sea creado. Hasta aquí, nada nuevo; ya has pasado por eso.

Aunque es relativamente fácil, tiene algunos inconvenientes:

  • Debe crear un VonageClient mientras que para IMeetingsClient

  • Se crea un acoplamiento innecesario a la VonageClient implementación, lo que hace que su código sea más difícil de probar

Y aún hay más: si quieres inyectar cualquiera de nuestros clientes, debes registrarlos todos en tu contenedor. Manualmente.

Sin duda, hay margen de mejora.

¡Entra en nuestro Registro DI!

Bien, ¡vamos a lo bueno! Con nuestro nuevo método de ampliación, ya no tendrás que hacerlo.

Comprueba lo fácil que es utilizarlo:

using Microsoft.Extensions.DependencyInjection;
using Vonage;
using Vonage.Extensions;

// ...

public void ConfigureServices(IServiceCollection services)
{
    //...

    // Initialize credentials
    Credentials credentials = ...
    // Register our clients with a 'Transient' lifetime...
    services.AddVonageClientTransient(credentials);
    // Or a 'Scoped' lifetime
    services.AddVonageClientScoped(credentials);

    // ...
}

¡Eso es!

Se basa en Contenedor DI ASP.NET de Microsoft.Extensions.DependencyInjectionlo que significa que es compatible siempre que se maneje una IServiceCollection instancia. Se proporciona por defecto en ASP.NET WebApi y WebApp, pero también puedes integrarlo con ConsoleApps y Services.

Puede elegir entre dos ServiceLifetime opciones:

  • Transient: los objetos siempre son diferentes

  • Scoped: los objetos son los mismos para una solicitud determinada, pero difieren en cada nueva solicitud

Al llamar a services.AddVonageClient{lifetime}le está diciendo al contenedor DI que configure el archivo VonageClient por ti.

Ahora puede disfrutar de la resolución de dependencias con el cliente principal o con cualquier subcliente:

[ApiController]
[Route("[controller]")]
public class VonageController : ControllerBase
{
    ...

    public VonageController(VonageClient client) => this.client = client;
}

[ApiController]
[Route("[controller]")]
public class VonageController : ControllerBase
{
    ...

    public VonageController(IMeetingsClient client) => this.client = client;
}

Conclusión

Estamos orgullosos de hacer que su viaje de desarrollador sea más fluido con nuevas mejoras en la calidad de vida. Nunca ha sido tan fácil integrar nuestro SDK en sus aplicaciones .NET.

¿Y adivina qué? Sus comentarios y contribuciones nos importan.

Así que no dudes en visitar nuestro repositorio de GitHub para notificar problemas, sugerir mejoras o incluso hacer pull requests. Si tienes preguntas, únete a nosotros en Slack para desarrolladores de Vonagey nos pondremos en contacto contigo.

¡Feliz codificación, amigos!

Compartir:

https://a.storyblok.com/f/270183/384x384/fdffb72c8b/guillaume-faas.png
Guillaume FaasPromotor senior de desarrollo .Net

Guillaume es desarrollador senior de .Net en Vonage. Ha estado trabajando en .Net durante casi 15 años, mientras que en los últimos años se ha centrado en la defensa de Software Craftsmanship. Sus temas favoritos son la calidad del código, la automatización de pruebas, el mobbing y las katas de código. Fuera del trabajo, le gusta pasar tiempo con su mujer y su hija, hacer ejercicio o jugar.