Проблема с MEF - ExportFactory <T>- вызов метода Dispose - PullRequest
1 голос
/ 04 января 2011

Если возможно, вызвать метод dispose для объекта, созданного с помощью ExportFactory?

Фабрика находится здесь:

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

Ответы [ 2 ]

2 голосов
/ 05 января 2011

Вы должны вызывать dispose для ExportLifetimeContext, возвращаемого вызовом CreateExport (), а не для самого экспортированного значенияЭто позволит утилизировать не только ViewModelController, но и любые одноразовые компоненты NonShared, созданные для удовлетворения его импорта.

0 голосов
/ 04 января 2011

В вашем контракте для chatScreen должен быть указан метод Dispose ().

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

Вот еще один ответ относительно сбора мусора, если вы ищете то.

...