2011-02-01 5 views
1

У меня проблема с классом импорта в интерфейсы в моем классе модели модели с MEF.Проблема с импортом MEF

Я рассматриваю модель создать свойство:

[Import] 
    private IEventAggregator EventAgg { get; set; } 

и я хочу subcribe это агрегатор события в конструкторе зрения модели:

Так что я стараюсь это:

public MessengerViewModel() 
    { 
     EventAgg.Subscribe(this); 
    } 

Я бегом приложения но приложение замораживается.

Поэтому я стараюсь подписаться агрегатором события в OnImportsSatisfied метода:

public void OnImportsSatisfied() 
    { 
     EventAgg.Subscribe(this); 
    } 

Но этот метод никогда не вызывается при создании вида модели класса.

только решение, работа:

[ImportingConstructor] 
    public MessengerViewModel(IEventAggregator eventAggregator) 
    { 
     EventAgg = eventAggregator; 
     EventAgg.Subscribe(this); 
    } 

Что плохого в первых двух способов?

ответ

1

Первый метод не будет работать потому что к тому времени, когда конструктор будет вызван, зависимость EventAgg по-прежнему равна нулю.

Второй метод с OnImportsSatisfied должен работать до тех пор, пока ваша модель представления реализует объект IPartImportsSatisfiedNotification.

2
  1. Вы не можете использовать свойство (сеттер) инъекции на частной собственности
  2. Вы должны осуществлять IPartImportsSatisfiedNotification на вашем ViewModel, если вы хотите MEF, чтобы автоматически вызывать OnImportsSatisfied
Смежные вопросы