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

Simplifier l'injection de dépendances en .NET

Publié le October 24, 2023

Temps de lecture : 2 minutes

Bonjour, chers développeurs !

Nous avons des nouvelles passionnantes à partager au sujet de notre SDK .NET ! Nous venons de mettre en place une nouvelle fonctionnalité fantastique qui vous facilitera grandement la vie. Vous savez que l'initialisation du client était un peu pénible, n'est-ce pas ? Eh bien, n'ayez plus peur !

Depuis la version v6.4.0nous avons intégré une solution qui simplifie le processus. Désormais, vous pouvez utiliser une méthode d'extension intéressante pour enregistrer notre client dans le conteneur d'injection de dépendance par défaut d'ASP.NET. Cela vous intrigue ? Continuez à lire pour en savoir plus !

Initialisation du client standard

Imaginons que nous souhaitions utiliser Meetings API de Meetings. Nous devrions initialiser une instance du client principal (VonageClient) pour récupérer les données spécifiques de l'API MeetingsClient.

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

C'est en effet assez simple car le client s'attend seulement à ce qu'un objet Credentials soit créé. Jusqu'ici, rien de nouveau ; vous êtes déjà passé par là.

Même si elle est relativement facile, elle présente quelques inconvénients :

  • Vous devez créer un VonageClient alors que vous n'avez besoin que d'un IMeetingsClient

  • Vous créez un couplage inutile avec l'implémentation VonageClient ce qui rend votre code plus difficile à tester

Et ce n'est pas tout : si vous voulez injecter l'un de nos clients, vous devez tous les enregistrer dans votre conteneur. Manuellement.

Il y a certainement une marge d'amélioration.

Entre dans notre enregistrement DI !

Bon, passons aux choses sérieuses ! Avec notre nouvelle méthode d'extension, vous n'avez plus besoin de faire cela.

Voyez comme il est facile à utiliser :

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

    // ...
}

C'est tout !

Il s'appuie sur ASP.NET DI Container de Microsoft.Extensions.DependencyInjectionce qui signifie qu'il est compatible tant que vous manipulez une instance de IServiceCollection . Il est fourni par défaut sur ASP.NET WebApi et WebApp, mais vous pouvez également l'intégrer à ConsoleApps et Services.

Vous avez le choix entre deux ServiceLifetime options :

  • Transient: les objets sont toujours différents

  • Scoped: les objets sont les mêmes pour une demande donnée mais diffèrent pour chaque nouvelle demande

En appelant services.AddVonageClient{lifetime}vous indiquez au conteneur DI de mettre en place l'élément VonageClient pour vous.

Vous pouvez maintenant profiter de la résolution des dépendances avec le client principal ou n'importe quel sous-client :

[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;
}

Conclusion

Nous sommes fiers de faciliter le travail des développeurs grâce à de nouvelles améliorations de la qualité de vie. Il n'a jamais été aussi facile d'intégrer notre SDK dans vos applications .NET.

Et devinez quoi ? Votre retour d'information et vos contributions comptent pour nous !

N'hésitez donc pas à visiter notre dépôt GitHub pour signaler des problèmes, suggérer des améliorations, ou même contribuer à des demandes d'extraction. Si vous avez des questions, rejoignez-nous sur le Slack des développeurs de Vonageet nous vous répondrons.

Bon codage, chers amis !

Partager:

https://a.storyblok.com/f/270183/384x384/fdffb72c8b/guillaume-faas.png
Guillaume FaasDéveloppeur .Net Senior Advocate

Guillaume est Senior Developer Advocate chez Vonage. Il travaille dans le domaine de .Net depuis près de 15 ans et s'est concentré sur la promotion du Software Craftsmanship au cours des dernières années. Ses sujets de prédilection sont la qualité du code, l'automatisation des tests, le mobbing et les katas du code. En dehors du travail, il aime passer du temps avec sa femme et sa fille, faire de l'exercice ou jouer.