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

.NETにおける依存性注入の簡素化

最終更新日 October 24, 2023

所要時間:1 分

開発者の皆さん、こんにちは!

私たちの.NET SDKについて、エキサイティングなニュースをお伝えします!この度、皆様の生活をより快適にする素晴らしい新機能をリリースしました。クライアントを初期化するのは少し面倒でしたよね?もう心配ありません!

バージョン v6.4.0バージョン6.4.0から、このプロセスの手間を省くソリューションを統合しました。ASP.NETデフォルトのDependency Injectionコンテナにクライアントを登録するために、クールな拡張メソッドを使用できるようになりました。興味を持ちましたか?続きをお読みください!

標準クライアントの初期化

以下を使用するとしよう。 Meetings APIの機能を使いたいとする。メインクライアント(VonageClient)のインスタンスを初期化して、特定の MeetingsClient.

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

クライアントが期待するのは Credentialsオブジェクトが作成されることを期待するだけだからだ。ここまでは新しいことではない。

比較的簡単でも、いくつかの欠点がある:

  • を作成しなければならない。 VonageClientを作成する必要があります。 IMeetingsClient

  • 実装との不必要なカップリング VonageClient実装との不要な結合が生じ、コードのテストが難しくなります。

さらに、私たちのクライアントのいずれかを注入したい場合は、それらをすべてコンテナに登録する必要があります。手動で。

改善の余地があるのは間違いない。

DI登録に入る!

さて、本題に入ろう!新しい拡張メソッドを使えば、もうその必要はない。

その使い勝手の良さをご覧あれ:

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

    // ...
}

それだけだ!

これは ASP.NET DIコンテナに依存しています。 Microsoft.Extensions.DependencyInjectionに依存しています。 IServiceCollectionインスタンスを扱っている限り、互換性があります。これはASP.NET WebApiとWebAppでデフォルトで提供されていますが、ConsoleAppsやServicesと統合することもできます。

以下の2つのオプションがあります。 ServiceLifetimeオプション

  • Transient: オブジェクトは常に異なる

  • Scoped: オブジェクトはあるリクエストでは同じですが、新しいリクエストごとに異なります。

を呼び出すことで services.AddVonageClient{lifetime}を呼び出すことで、DIコンテナがあなたのために VonageClientをセットアップするよう指示したことになる。

メインクライアントやサブクライアントとの依存関係を解消することができます:

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

まとめ

私たちは、新しいクオリティ・オブ・ライフの改善により、開発者の旅をよりスムーズにできることを誇りに思っています。SDKを.NETアプリケーションに統合するのがかつてないほど簡単になりました。

そして、何だと思いますか?あなたのフィードバックと貢献は私たちにとって重要です!

私たちのGitHubリポジトリで問題を報告したり、改善を提案したり、あるいはプルリクエストを投稿してください。質問がある場合は Vonage Developer Slackにご参加ください。

ハッピー・コーディング

シェア:

https://a.storyblok.com/f/270183/384x384/fdffb72c8b/guillaume-faas.png
Guillaume Faasシニア.Netデベロッパー

ギヨームはVonageのシニア.Netデベロッパー・アドボケイト。.Netで15年近く働いているが、ここ数年はSoftware Craftsmanshipの提唱に注力している。好きなトピックは、コード品質、テスト自動化、モビング、コード・カタなど。仕事以外では、妻や娘と過ごす時間、ワークアウト、ゲームを楽しんでいる。