Добавление представлений не вызывает операторы MEF Import - PullRequest
1 голос
/ 14 октября 2011

У меня есть вид, управляемый моделью вида (использующей MEF), которая позволяет пользователю выбирать элементы из выпадающего списка. Каждый элемент, выбранный пользователем, заполняет элемент управления вкладкой, который определяется как регион. Модель представления создает представление, назначает ему модель представления и затем добавляет его в область:

ProjectDetailView view = new ProjectDetailView();
ProjectDetailViewModel viewModel = new ProjectDetailViewModel();
viewModel.CurrentProject = project;
view.DataContext = viewModel;
RegionManager.Regions["SelectedItemsRegion"].Add(view);

Все это прекрасно работает с точки зрения пользовательского интерфейса. Однако модель подробного представления проекта содержит операторы [Import] для получения EventAggregator для публикации событий.

[Import]
public IEventAggregator EventAggregator { get; set; }

Поскольку я только добавляю представления в регион, а не выполняю запрос для перехода к определенному URI, композиция никогда не возникает (или, по крайней мере, не отображается), поэтому EventAggregator всегда равен нулю. Как мне получить эти динамически добавленные представления, чтобы пройти через процесс импорта запрошенных классов? Есть ли метод compose, который я могу вызвать для конкретного представления, чтобы все было решено?

1 Ответ

0 голосов
/ 15 октября 2011

Я бы предложил создать класс фабрики для создания экземпляра EventAggregator, например:

public EventAggregatorFactory
{
    [Export(typeof(IEventAggregator))]
    public IEventAggregator Instance
    {
        get
        {
            return new EventAggregator();
        }
    }
}

Очевидно, переместите объявление Export в фабричный класс. Это должно позволить надлежащую реализацию Import EventAggregator при вызове модели представления.

...