0

MEF で他のコンポーネントへの参照を指定する宣言的な方法はありますか? 申し訳ありませんが、.NET は初めてで、コード内で参照のみを宣言するこの msdn MEF チュートリアルを見つけました。

私が求めているのは、この部分を指定できるかどうかです:

[Import(typeof(ICalculator))]
public ICalculator calculator;

ある種のプロパティファイルで次のように:

Requires-Component: ICalculator

ご存知の方もいらっしゃると思いますが、私は OSGi の動作 (Java ランド)、特に Declarative Services の部分を模倣しようとしています。

4

2 に答える 2

2

MEFは、契約名で識別される他の構成可能パーツをインポートおよびエクスポートする構成可能パーツを含むカタログの概念に基づいています。これは非常に抽象的ですが、ほとんどの場合、MEFの部分は、インポートを介して他のタイプに依存するタイプです(たとえば、オブジェクトグラフを作成するために、ルートオブジェクトはグラフのさらに下にある他のオブジェクトに依存します)。コントラクト名はタイプの名前です。

ただし、MEFフレームワークの上に構築して、依存関係を持つ独自のパーツを作成することはできます。そうすると、(属性で注釈が付けられた型で機能する)を使用しなくなりますが、代わりに、「プロパティファイル」などから構築できるAssemblyCatalog独自のファイルを実装する必要があります。また、抽象クラスと抽象クラスServiceCatalogから派生して、独自のパーツを実装する必要があります。MEFは、独自の契約名を使用して定義したインポートとエクスポートに従って、パーツを作成し、それらを接続できるようになります。ComposablePartDefinitionComposablePart

于 2012-05-25T14:00:06.120 に答える
0

この説明をコメントに書きました:

コードがフレームワークに依存せず、ニュートラルであり、MEF などの痕跡がないようにしたいのです。

他の依存性注入フレームワークを見ると、コンポーネントを構成するための 3 つの一般的な戦略があることがわかります。

  1. 構成ファイル
  2. コード内の構成 (コンポーネント コードとは別)
  3. コンポーネント タイプの属性

あなたのコメントから、依存性注入フレームワークへの依存関係でコンポーネントコードを「汚染」するため、3番目のアプローチを避けたいようです。私は同意しません。

現在、3. が MEF ですぐにサポートされる唯一のアプローチです。(独自のものを実装したり、1. または 2. を実行したりできますが、それはかなり高度な使用例です) ExportProviderComposablePartCatalog

次の .NET 4.5 リリース (現在はベータ版) では、MEF はすぐにオプション 2 をサポートします。MEF コンベンション モデルと呼ばれます。

または、別の依存性注入コンテナを使用することもできます。少なくともCastle WindsorSpring.NET、およびStructureMapは、外部構成ファイルをサポートしています。

ただし、オプション 2 をお勧めします。構成をコンポーネント コードから分離したまま、外部構成ファイルよりも保守が容易であるため、コードでの構成をお勧めします。AutofacNinjectなどの他のコンテナーを見てみましょう。

于 2012-05-25T20:25:35.577 に答える