4

現在のソリューションには18のプロジェクトがあり、それらのほとんどには独自の構成ファイル(app.configまたはweb.config)があります。各プロジェクトは、単一の共有BLLアセンブリを使用します。Autofacを使用して依存関係を処理していますが、構成を適切に管理する方法がありません。構成エントリはほぼ同じですが、値が異なります。一部のプロジェクトはカスタム構成セクションを使用し、一部は使用しません。

私は結局:

  1. 単一のautofacbootstrapperクラスを作成して、構成ファイルラッパーを除くすべての依存関係を登録します。
  2. IConfigurationインターフェイスを使用して(すべてのプロジェクトで参照される)個別のアセンブリを作成します。
  3. IConfigurationの各プロジェクト独自の実装を作成します。
  4. 共有ブートストラップを介した各プロジェクトの適切な場所でのブートストラップ依存関係。
  5. ブートストラップ登録後に、プロジェクト自体のIConfiguration実装を個別に登録します。

私は一般的にAutofacとDIに非常に慣れておらず、複雑さと拡張性の間の適切なバランスを見つけるよう努めています。

構成ファイルを管理するためのより良い方法はありますか?

ありがとうございました。

4

2 に答える 2

4

Autofacでは、この目的でモジュールを使用します。関連するコンポーネントのグループは、プログラムAPIによって構成されるモジュールにカプセル化されます。

AutofacのXML構成はモジュールをサポートしているため、アプリケーションでモジュールを使用することを決定したら、構成ファイルに(含まれているすべてのコンポーネントではなく)モジュールを登録できます。

モジュールは、接続文字列、URIなど、内部のコンポーネントに転送できるパラメーターをサポートします。

ここにあるドキュメントで始めることができます:http ://code.google.com/p/autofac/wiki/StructuringWithModules

HTH

ニック

于 2010-01-11T11:33:53.877 に答える
3

経験則として、依存関係の構成は、アプリを再コンパイルせずに変更できるようにしたいものを表す場合にのみ.configファイルに入れます。デフォルトでは、そのような構成はありません。

AutoFacについては(まだ)知りませんが、Castle Windsorでは、コンテナーの.configとプログラム構成を混在させることができます。これは、私が通常行うことです。再コンパイルせずにそれらを変更しますが、残りはコードに登録されます(多くの場合、慣例により)。

私があなたと同じような問題に取り組んだ方法は、専用のコンテナを含む別のライブラリを作成することです。これはあなたのアプローチとよく似ています。この特殊なコンテナは、依存関係のすべての一般的な構成をカプセル化します。

各アプリケーションには、共有コンテナーから派生し、オーバーライドする必要のある構成をオーバーライドする、さらに特殊なコンテナーがあります。

私があなたの説明を理解する方法では、そのアプローチはあなたのアプローチからそれほど離れていないようですが、あなた自身を支持し、可能な限り多くの構成をXMLからコードに移動します-実際にはその方法でより管理しやすくなります。

于 2010-01-11T10:37:26.283 に答える