GetExportedValueのインスタンス破棄

MEFでプラグインを作る場合、PartCreationPolicy属性でNonSharedを指定すると、Composer.GetExportedValueするたびに新しいインスタンスが作成される。
だがしかし、以前のインスタンスが破棄されない。こいつが困った。

結論から言うと、importするクラスを返すGetExportedValueでは作成されたインスタンスを破棄することはできない。

NonSharedでExportしたインスタンスを破棄するには、Composer.ReleaseExportを使わねばならない。
しかしこのReleaseExportの引数はインスタンス化されたクラスオブジェクトではなく、Lazy exportになるので、Composer.GetExportで取得したexportを保存しておき、不要になった時点でReleaseExportしてやる。

インスタンス化されたオブジェクトは、export.Valueで取得できる。

とまあそんな感じ。
スポンサーサイト

コメントの投稿

非公開コメント

No title

自分でメモリ確保して自分で開放する方が
頭の硬い自分には単純で良いと思ってしまう
時点でもう技術者じゃないんでしょうね。
WPFのプラグイン開発環境?MEF
プラグインってかっこいいですね。何かやってみたい(笑

プラグインというと

自由に拡張できるような設計すれば格好いいんだけどね(^^;;
単純に依存関係のない開発スタイルがとれるってのも製造やテスト考えると便利なわけで、、と思って作っても後続が理解してくれないから結局なんだけども(^^;;
プロフィール

f_yamaki

Author:f_yamaki

アクセスカウンタ
最近の記事
最近のコメント
最近のトラックバック
月別アーカイブ
カテゴリー
ブロとも申請フォーム

この人とブロともになる

ブログ内検索
RSSフィード
リンク