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

Vereinfachung der Dependency Injection in .NET

Zuletzt aktualisiert am October 24, 2023

Lesedauer: 2 Minuten

Hallo, liebe Entwicklerfreunde!

Wir haben einige aufregende Neuigkeiten über unser .NET SDK zu verkünden! Wir haben gerade eine fantastische neue Funktion eingeführt, die Ihr Leben viel einfacher machen wird. Sie wissen doch, dass die Initialisierung des Clients immer ein wenig mühsam war, oder? Nun, keine Angst mehr!

Seit der Version v6.4.0haben wir eine Lösung integriert, die diesen Prozess vereinfacht. Jetzt können Sie eine coole Erweiterungsmethode verwenden, um unseren Client im ASP.NET-Standard-Container für Dependency Injection zu registrieren. Sind Sie neugierig geworden? Lesen Sie weiter und erfahren Sie mehr!

Standard-Client-Initialisierung

Stellen Sie sich vor, wir würden gerne die Meetings API Funktionen nutzen. Wir müssten eine Instanz des Hauptclients initialisieren (VonageClient) initialisieren, um die spezifischen MeetingsClient.

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

Es ist in der Tat recht einfach, da der Client nur erwartet, dass ein Credentials Objekt erstellt werden soll. Soweit nichts Neues; das kennen Sie ja schon.

Auch wenn es relativ einfach ist, hat es ein paar Nachteile:

  • Sie müssen eine VonageClient erstellen, während Sie nur eine IMeetingsClient

  • Sie schaffen eine unnötige Kopplung an die VonageClient Implementierung, wodurch Ihr Code schwieriger zu testen ist

Und das ist noch nicht alles: Wenn Sie einen unserer Clients injizieren wollen, müssen Sie alle in Ihrem Container registrieren. Manuell.

Es gibt definitiv noch Raum für Verbesserungen.

Betritt unsere DI-Registrierung!

Okay, kommen wir zu den guten Dingen! Mit unserer neuen Erweiterungsmethode müssen Sie das nicht mehr tun.

Prüfen Sie, wie einfach es zu bedienen ist:

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

    // ...
}

Das war's!

Es stützt sich auf ASP.NET DI Container von Microsoft.Extensions.DependencyInjectionauf, was bedeutet, dass es kompatibel ist, solange Sie mit einer IServiceCollection Instanz. Dies wird standardmäßig auf ASP.NET WebApi und WebApp bereitgestellt, aber Sie können es auch in ConsoleApps und Services integrieren.

Sie haben die Wahl zwischen zwei ServiceLifetime Optionen:

  • Transient: Objekte sind immer unterschiedlich

  • Scoped: Die Objekte sind für eine bestimmte Anfrage gleich, unterscheiden sich aber bei jeder neuen Anfrage

Durch den Aufruf von services.AddVonageClient{lifetime}teilen Sie dem DI-Container mit, dass er die VonageClient für Sie einrichtet.

Sie können nun mit dem Hauptmandanten oder einem beliebigen Untermandanten Abhängigkeiten auflösen:

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

Einpacken

Wir sind stolz darauf, Ihnen als Entwickler mit neuen Qualitätsverbesserungen den Weg zu ebnen. Es war noch nie so einfach, unser SDK in Ihre .NET Applications zu integrieren.

Und wissen Sie was? Ihr Feedback und Ihre Beiträge zählen für uns!

Sie können also gerne unser GitHub-Repository besuchen, um Probleme zu melden, Verbesserungen vorzuschlagen oder sogar eigene Pull-Requests einzureichen. Wenn Sie Fragen haben, schließen Sie sich uns auf dem Vonage Entwickler-Slackund wir werden uns bei Ihnen melden.

Viel Spaß beim Coding, Freunde!

Teilen Sie:

https://a.storyblok.com/f/270183/384x384/fdffb72c8b/guillaume-faas.png
Guillaume FaasSenior .Net Entwickler Advocate

Guillaume ist ein Senior .Net Developer Advocate bei Vonage. Er arbeitet seit fast 15 Jahren in .Net und hat sich in den letzten Jahren auf die Förderung von Software Craftsmanship konzentriert. Zu seinen Lieblingsthemen gehören Codequalität, Testautomatisierung, Mobbing und Code Katas. Außerhalb der Arbeit verbringt er gerne Zeit mit seiner Frau und seiner Tochter, treibt Sport oder spielt Spiele.