2016-10-18 5 views
0

私は3つのライブラリlib1、lib2、lib3を使用するアプリケーションを持っています。それぞれのライブラリでは、そのライブラリに実装されている依存関係を登録するModuleを実装しました。Autofacモジュールが独自の依存モジュールを登録する必要がありますか?

これらの実装には独自の依存関係があります。たとえば、lib2とlib3の両方にlib1に存在する実装が必要な場合があります。

私の質問は、lib2とlib3のモジュールが、Load実装の一部としてlib1のモジュールを登録するようにしますか?私のアプリがlib2とlib3のモジュールを登録している場合は、このモジュールを2回登録する予定ですか?

また、モジュールに別のモジュールを登録させたり、起動時に一部の登録が見つからないという欠点をアプリケーションに残したりしないようにしますか?

+0

この質問は、ライブラリが独自の登録を登録しても問題ないかどうかについてのものではありません。彼らはしない。彼らは、コンポジションルートで使用されるこれらの依存関係を登録するのに役立つファサードを提供するだけです。 –

答えて

0

Autofacは、コンポーネントの登録を支援するファサードに過ぎません。それは、それ自身の登録の依存関係であることが知られている実装を登録する目的で他のモジュールを呼び出すべきではありません。

さらに、同じモジュールが複数回登録された場合、Autofacはすでに登録されているモジュールを追跡しないため、登録自体は複数回適用されます。これは通常、コンポジションルートが既存のものを上書きすることを意図した登録を無効にしない限り、問題を引き起こさない。

1

一般に、構成を含むライブラリは1つだけです。このライブラリはスタートアッププロジェクトであり、すべてが配線されているこのアプリケーション内の場所は、一般にComposition Rootと呼ばれます。通常は、スタートアッププロジェクトだけがコンポジションルートを持ち、1つのソリューション内の複数のスタートアッププロジェクトが重複登録を共有する場合にのみ、このコードをコンポジションルートが再利用できる共通の場所に抽出します。しかし、注意してください:一般的にComposition Roots should not be reused

+0

確かに、私は構成の根を再利用していません。私はライブラリ内の物の登録を簡単にするために作成されたファサードを再利用しています。 –

1

あなたのライブラリ内での登録はお勧めしません。ほとんどの場合、すべてのアプリケーションを構成する1つのコンポジションルートが必要です。

構成ルートは、モジュールが一緒に構成されているアプリケーションで(好ましくは)一意の場所です。

ここでは、この概念をcomposition rootで説明します。

ところで、モジュールを複数回登録した場合、Autofacはコンポーネントマルチタイムを登録します。ライブラリ内にモジュールが必要な場合は、ライブラリのコンポーネントを登録するモジュールのみを作成してください。

+0

私は、私のソリューションの各アプリケーションごとに1つ、複数の構成ルートを持っています。確かに私はすべての登録コードを書き換える必要はありませんか?もしそうなら、モジュールを持っているのは何ですか? –

+0

モジュールは登録の整理に役立ちます。また、既に登録されているコンポーネントまたは登録ソースにアタッチして、登録動作を変更することもできます。 * Autofac *モジュールの詳細については、http://docs.autofac.org/en/latest/configuration/modules.htmlを参照してください。 –

関連する問題