ASP.NetCoreでAutofacを使用する方法

依存性注入は疎結合を促進し、テスト容易性とメンテナンスを促進します。ASP.Net Coreは、最小限の依存性注入コンテナーを使用して、依存性注入(制御の反転の一種)の組み込みサポートを提供します。ただし、組み込みコンテナーには、制御コンテナーの本格的な依存性注入または反転の機能の多くが欠けています。

これを克服するために、ASP.NetCoreでサードパーティのコンテナーを使用できます。つまり、組み込みコンテナをサードパーティのコンテナに簡単に置き換えることができます。Autofacは、依存関係を解決するために使用できる制御コンテナの反転です。この記事では、ASP.NetCoreでAutofacを使用する方法について説明します。

VisualStudioでASP.NetCoreプロジェクトを作成します

まず、VisualStudioでASP.NetCoreプロジェクトを作成しましょう。Visual Studio2017またはVisualStudio 2019がシステムにインストールされていると仮定して、以下に概説する手順に従って、VisualStudioで新しいASP.NetCoreプロジェクトを作成します。

  1. Visual StudioIDEを起動します。
  2. 「新しいプロジェクトの作成」をクリックします。
  3. [新しいプロジェクトの作成]ウィンドウで、表示されたテンプレートのリストから[ASP.Net CoreWebアプリケーション]を選択します。
  4. [次へ]をクリックします。
  5. 「新しいプロジェクトの構成」ウィンドウで、新しいプロジェクトの名前と場所を指定します。
  6. [作成]をクリックします。
  7. [新しいASP.NetCore Webアプリケーションの作成]ウィンドウで、ランタイムとして.Net Coreを選択し、上部のドロップダウンリストからASP.Net Core 2.2(またはそれ以降)を選択します。
  8. プロジェクトテンプレートとして「Webアプリケーション」を選択します。 
  9. ここではこれらの機能を使用しないため、[Dockerサポートを有効にする]チェックボックスと[HTTPS用に構成する]チェックボックスがオフになっていることを確認してください。
  10. 認証も使用しないため、認証が「認証なし」に設定されていることを確認してください。
  11. [作成]をクリックします。

これにより、VisualStudioで新しいASP.NetCoreプロジェクトが作成されます。この記事の後続のセクションでこのプロジェクトを使用して、Autofacを操作します。

ASP.NetCoreプロジェクトにAutofacをインストールします

Autofacのインストールは簡単です–NuGetからインストールできます。この記事の執筆時点では、Autofacの現在のバージョンは4.9.2です。Autofacを使用するには、Autofac.Extensions.DependencyInjectionパッケージもインストールする必要があります。これにより、Autofacを操作するために必要な依存関係が確実にインストールされます。

上で作成したASP.NetコアWebアプリケーションプロジェクトを選択し、右クリックしてNuGetパッケージマネージャーを介してAutofac.Extensions.DependencyInjectionをインストールします。インストール中に要求される可能性のあるライセンス契約に同意します。または、NuGetパッケージマネージャーコンソールで次のコマンドを入力して、このパッケージをインストールすることもできます。

インストールパッケージAutofac.Extensions.DependencyInjection

ASP.NetCoreアプリケーションでクラスを作成します

依存性注入を説明するために、操作するオブジェクトがいくつか必要になります。以下のGetMessageメソッドの宣言を含むIAuthorRepositoryインターフェースについて考えてみます。

 パブリックインターフェイスIAuthorRepository

    {{

        文字列GetMessage();

    }

AuthorRepositoryクラスは、以下に示すようにIAuthorRepositoryインターフェースを実装します。

 パブリッククラスAuthorRepository:IAuthorRepository

    {{

        パブリック文字列GetMessage()

        {{

            「HelloWorld」を返します。

        }

    }

これはリポジトリの最小限の実装であることに注意してください。つまり、一般的なリポジトリに含まれているCRUDメソッドは含まれていません。CRUDメソッドを適切に実装するのはあなたに任せます。

ASP.NetCoreでAutofacを構成する

Autofacを構成するには、StartupクラスのConfigureServicesメソッドで構成コードを指定する必要があります。ConfigureServicesメソッドは、実行時にコンテナーにサービスを追加するために使用されることに注意してください。

最初のステップは、必要なサービスをAutofacコンテナーに登録するためのコンテナービルダーを作成することです。最初のステップは、以下に示すように、Populateメソッドを使用してフレームワークサービスにデータを入力することです。

var containerBuilder = new ContainerBuilder();

containerBuilder.Populate(services);

次のステップは、カスタムサービスをAutofacに登録することです。これを行うには、次に示すように、コンテナービルダーインスタンスでRegisterTypeメソッドを使用します。

containerBuilder.RegisterType()。As();

コンテナをビルドするには、次のコードを記述します。

var container = containerBuilder.Build();

container.Resolve();を返します。

参考までに、ConfigureServicesメソッドの完全なソースコードを次に示します。

public IServiceProvider ConfigureServices(IServiceCollection services)

   {{

       services.AddMvc();

       var containerBuilder = new ContainerBuilder();

       containerBuilder.Populate(services);

       containerBuilder.RegisterType()。

       なので();

       var container = containerBuilder.Build();

       container.Resolve();を返します。

   }

ASP.NetCoreのコントローラーでAutofacを使用する

Autofacがプロジェクトにインストールおよび構成されたので、コントローラーでAutofacの使用を開始できます。次のコードスニペットは、ValuesControllerの依存関係を解決する方法を示しています。

  パブリッククラスValuesController:ControllerBase

  {{

        プライベートIAuthorRepository_authorRepository; 

        public ValuesController(IAuthorRepository authorRepository) 

        {{

            _authorRepository = authorRepository;

        } // GET api / values

        [HttpGet]

        public ActionResult Get()

        {{

            return _authorRepository.GetMessage();

        }

     //その他のアクションメソッド

  }

依存性注入の原則は、制御の反転の原則を実現したものです。これは、これらの依存関係を外部に挿入できるようにすることで、実装か​​ら依存関係を削除するために使用される手法です。Autofacなどの制御コンテナの反転は、依存性注入を利用して制御の流れを反転させ、オブジェクトのインスタンス化とライフサイクル管理を自動化するのに役立ちます。

依存性注入には、コンストラクター注入、インターフェイス注入、プロパティ注入の3つの形式があります。この例では、コンストラクターインジェクションを使用して、実行時にValuesControllerクラスに依存関係(つまり、AuthorRepository型のインスタンス)をインジェクトしました。

Autofacを使用してASP.NetCoreのデフォルトの依存性注入コンテナーを置き換える方法を見てきましたが、その機能のほんの一部にすぎません。Autofacについては、今後の投稿でさらに詳しく説明します。