2012-02-10 15 views
0

リンクがあるかどうかに応じて、コンテナがクラスのインスタンスであるかどうかを確認するにはどうすればよいですか。 はI MEFの容器を使用して、C#のMEFコンテナの1つまたは複数の実装

編集:つまり enter image description here

、私はクラスの共有オブジェクトの寿命を管理する能力が必要です。たとえば、共有オブジェクト(Obj3)への参照をインポートする2つの点(オブジェクトObj1、Obj2)がありますが、これらのクラスはNoneSharedで長生きませんが、オブジェクト(Obj3)大きくて高価なので、常に記憶に残っています。

多分、他のIoCコンテナがあります。これは、オブジェクトの存続期間を処理する機会が増えるでしょうか?

+0

私はあなたの質問を理解していません。 – Gilles

+0

私は私の質問を説明しようとしました。 – Ivan

+0

あなたは2つのポイントがあると言いますが、2つの部分を意味しますか? obj1と2は通常のオブジェクトですか、それともMEFによって作成されていますか? – Gilles

答えて

1

共有作成ポリシーで作成されたパーツは、コンテナによって保持され、コンテナの存続期間を共有します。

削除されたオブジェクトのインポートを共有するために共有部分が使用されても、その部分はコンテナに残っています。

1:ここでは

は、その周りを取得する方法ですあなたの輸出に次atributeを使用して非共有にパーツの作成ポリシーを変更します。

[PartCreationPolicy(CreationPolicy.NonShared)] 

2:あなたは解放することができますコンテナのReleaseExportメソッド(docdoc)を使用して、特定の部分を削除します。これは、NonSharedの部分でのみ機能します。

3:共有部分に子コンテナを使用してください(doc)。この方法で、子コンテナを処分することができます。子コンテナは共有部品を処分します。使用中に子コンテナを使用して、使用後に処分されていることを確認することができます。これはコンテナ内の共有部分を取り除くために私が見る唯一の方法です。

ところでああとは、

はたぶん他のIoCコンテナがあり、

MEFは技術的にIoCコンテナではありません。それはIoCのコンセプトを使用し、あなたはIoCコンテナのように使うことができますが、それは最初のものであり、拡張フレームワークです。

+0

便利な情報、特に3番目の段落(このアイデア!)。おそらく、MEFよりも美しく働くことを可能にするIoCコンテナがあります。 – Ivan

+0

悲しいことに、MEFを使用して、パート・ポリシーNonSharedを保持する場合は、子コンテナを使用する必要があります。 – Gilles

+0

代替手段はありますか?働く方が便利ですか? – Ivan

関連する問題