0

コンテナへのリンクがあるかどうかに応じて、コンテナがクラスのインスタンスであるかどうかを確認するにはどうすればよいですか。私はMEFコンテナ、C#を使用しています

編集: ここに画像の説明を入力

つまり、オブジェクトの共有クラスの有効期間を管理する機能が必要です。たとえば、共有オブジェクト (Obj3) への参照をインポートする 2 つのポイント (オブジェクト Obj1、Obj2) がありますが、これらのクラスは NoneShared であり、長生きしませんが、オブジェクト (Obj3) - それらがインポートしたリンク大きくて高価で、常にメモリに保持されます。

オブジェクトの有効期間を操作する機会を増やす、他の IoC コンテナーがあるのではないでしょうか?

4

1 に答える 1

1

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

破棄されたオブジェクトのインポートを埋めるために共有パーツが使用されたとしても、そのパーツはコンテナーと共に存在し続けます。

これを回避する方法は次のとおりです。

1: エクスポートで次の属性を使用して、パーツの作成ポリシーを非共有に変更します。

[PartCreationPolicy(CreationPolicy.NonShared)]

2: コンテナー ( doc doc )で ReleaseExport メソッドを使用して、特定の部分を解放できます。これも非共有パーツでのみ機能することに注意してください。

3: 共有パーツ ( doc )には子コンテナーを使用します。このようにして、子コンテナーを破棄できます。これにより、その共有パーツが破棄されます。using で子コンテナーを使用して、使用後に確実に破棄することができます。これは、コンテナ内の共有部分を取り除く唯一の方法です。

ところで、

他にもIoCコンテナがあるのか​​もしれませんが、

MEF は技術的には IoC コンテナーではありません。これは IoC の概念を使用しており、IoC コンテナーのように使用できますが、何よりもまず拡張フレームワークです。

于 2012-02-11T05:44:54.253 に答える