5

これらすべてのフィールドが再構成[Import]を禁止している属性でマークされたフィールドのセットを持つクラスがあるとしましょう。

ある時点で、このクラスはを使用new MyClassWithInjectedFields(...)してインスタンス化され、対応するすべての依存関係はMEFフレームワークを使用して注入されます。深刻なことはなく、全単射Export-To-Importマッピングのみです。

質問:

  • この場合、クラスインスタンスがガベージコレクションされるまで、注入されたフィールドの値は同じままであると想定しても安全ですか?

  • または、実行時に暗黙的に変更される可能性がある、まれな/あいまいなケースがいくつかあるのでしょうか。MEFおそらく、誰かが依存関係の解決に使用されるアセンブリをアンロードまたはリロードするときですか?

(私は初めてMEFで、実行時に依存関係グラフに影響を与える方法があるかどうかはわかりませんが、明らかにあるかもしれません)。

4

1 に答える 1

6

1)MEFはGCに対して特別なことを何も行っていないため、オブジェクトへのライブ参照がなくなるまでインスタンスはGCされません。

2)インポートが再構成可能としてマークされていない場合、MEFはインポートの値のみを変更します。実行中の.NETプロセスでアセンブリをアンロード/リロードすることはできません。AppDomainをアンロードすることはできますが、その場合、基本的にオブジェクト参照を強制的に強制終了しますが、MEFはそれらをリセットするために特別なことは何もしません。

于 2012-10-10T01:57:04.270 に答える