2011-01-04 21 views
1

可能であれば、ExportFactoryで作成されたオブジェクトに対してメソッドを呼び出しますか?MEFの問題 - ExportFactory <T> - 呼び出しDisposeメソッド

工場はここにある:オブジェクトの

public interface IViewModelsControler 
{ 
    IChatViewModel CreatChatViewModel(); 
} 

[Export(typeof(IViewModelsControler))] 
public class ViewModelsControler:IViewModelsControler 
{ 

    [Import] 
    public ExportFactory<IChatViewModel> ChatViewFactory { get; set; } 

    public IChatViewModel CreatChatViewModel() 
    { 
     return ChatViewFactory.CreateExport().Value; 
    } 
} 

作成:

var chatScreen = ViewModelControler.CreatChatViewModel(); 

私はchatScreen.Disposeを呼び出したいと思います()。このような

ChatViewModelコールルック:

[Export(typeof(IChatViewModel))] 
[PartCreationPolicy(CreationPolicy.NonShared)] 
public class ChatViewModel : Screen, IChatViewModel 
    {} 
+0

誰かがこの投稿を編集できるので、コードはブロックテキストではありませんか? – IAbstract

+1

@dboarmanそんなの? – jcolebrand

答えて

2

エクスポートされた値自体ではなく、CreateExport()の呼び出しによって返されたExportLifetimeContextでdisposeを呼び出す必要があります。これにより、ViewModelControllerだけでなく、そのインポートを満たすために作成されたNonSharedの使い捨てパーツも処分されます。

0

chatScreenのためのあなたの契約は、廃棄()メソッドを公開する必要があります。

public interface IViewModelsControler 
{ 
    IChatViewModel CreatChatViewModel(); 
    void Dispose(); // add to expose your dispose method 
} 

ガベージコレクションについては、別の場合はanswerです。

+0

私は質問に答えるのが間違っているので、 "* chatMessage()を呼び出す方法は?"、またはこのメソッドを実行しないでください。なぜ私の答えが間違っているのか知ることは役に立ちます。 – IAbstract

関連する問題