2011-01-04 14 views
1

Falls möglich, dispose-Methode für ein Objekt aufrufen, das mit ExportFactory erstellt wurde? hierProblem mit MEF - ExportFactory <T> - Aufruf der Methode Dispose

Factory ist:

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; 
    } 
} 

Erstellung des Objekts:

var chatScreen = ViewModelControler.CreatChatViewModel(); 

Ich mag chatScreen.Dispose nennen würde().

ChatViewModel Aufruf sieht wie folgt aus:

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

Kann jemand diesen Beitrag bearbeiten, so dass der Code kein Blocktext ist? – IAbstract

+1

@ dboarman So? – jcolebrand

Antwort

2

Sie sollten dispose für den ExportLifetimeContext aufrufen, der vom Aufruf von CreateExport() zurückgegeben wird, nicht für den exportierten Wert selbst. Dadurch werden nicht nur der ViewModelController, sondern alle NonShared-Wegwerfteile, die erstellt wurden, um die Importe zu erfüllen, verfügbar.

0

Ihr Vertrag für chatScreen benötigt die Methode Dispose() zu belichten.

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

Hier ist eine weitere answer Garbage Collection in Bezug auf, wenn das ist, was Sie nach.

+0

Wird dies abgelehnt, weil ich bei der Beantwortung der Frage falsch bin, "* wie würde * ich ...' chatScreen.Dispose() '?" Nennen, oder weil diese Methode nicht ausgeführt werden sollte? Es wäre hilfreich zu wissen, warum meine Antwort falsch ist. – IAbstract