Проблема с импортом MEF - PullRequest
1 голос
/ 01 февраля 2011

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

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

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

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

Итак, я пытаюсь это:

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

Я запускаю приложение, но приложение зависает.

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

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

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

Единственное решение, работа которого:

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

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

Ответы [ 2 ]

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

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

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

...