web-dev-qa-db-ja.com

.NET Core Class Library(.NET Standard)での依存性注入の使用

私はリンクを通過しました:

https://docs.Microsoft.com/en-us/aspnet/core/mvc/controllers/dependency-injection

web APIに依存性注入を使用する方法を学びました。

上記のリンクで述べたように、APIレイヤー内の依存性注入にスタートアップ(Startup.cs)クラスを使用できます。しかし、どのように.NET Core Class Libraryの依存性注入を達成できますか。以下は、クラスライブラリを追加するスクリーンショットです。 enter image description here

そして、私のプロジェクト構造は

enter image description here

プロジェクト「DataManagement.Repository」でクラス「UserRepository」を作成し、プロジェクト「DataManagement.Repository.Interfaces」でインターフェイス「IUserRepository」を作成しました。

プロジェクト「DataManagement.Business」で、クラス「UserManager」を作成しました

class UserManager
    {
        private IUserManager _userManager;
        public UserManager(IUserManager userManager)
        {
            _userManager = userManager;
        }
    }

ご覧のとおり、私はコンストラクターを介して依存関係の注入を試みています。

しかし、.NET Core Class Library(.NET Standard)内で依存関係の注入を有効にするために、どのような変更を行う必要があるかはわかりません。

19

クラスライブラリで何もする必要はありません。メインアプリケーションにのみ composition root があります(オブジェクトグラフを設定できるアプリケーションライフサイクルの最も早い時点)。

これはStartup.cs ASP.NET Coreアプリケーション。依存関係も登録します:

services.AddScoped<IUserManager,UserManager>();

それでおしまい。クラスライブラリにはコンポジションルートがありません。アプリケーションなしでは使用できず、使用されるIoCコンテナはライブラリではなくアプリケーションの選択であるため、どちらも必要ありません。

ただし、ASP.NET Coreで一般的なAddXxxメソッドや、AutofacやCastle WindsorなどのサードパーティIoC containernのような何らかの種類のモジュールシステムなど、便利なメソッドを提供してこの登録を行うことができます。

23
Tseng