Prism / MEF. Когда мое приложение будет запущено, как позже добавить его в свой AggregateCatalog? - PullRequest
1 голос
/ 09 марта 2011

По сути, у меня есть следующий сценарий:

  1. Пользователь запускает приложение
  2. Загрузчик загружает каталог «Модули» в AggregateCatalog.
  3. Мое меню навигации
  4. Пользователь нажимает кнопку обновления
  5. Приложение загружает новый модуль и копирует его в каталог модулей.

Мне нужно как-то добавитьновый модуль в мой AggregateCatalog и обновить мое меню навигации.Я считаю, что «AllowRecomposition» необходимо, но как мне на самом деле добавить новую сборку в мой AggregateCatalog после того, как мое приложение уже запущено?

1 Ответ

1 голос
/ 09 марта 2011

Если вы импортируете AggregateCatalog, вы можете получить к нему доступ из вашей ViewModel (или из того места, куда вы хотите добавить его.

[Import()]
private AggregateCatalog _aggregateCatalog;

...

private void SomeFunc()
{
    _aggregateCatalog.Catalogs.Add(...);
}


ПРИМЕЧАНИЕ. Если сборка повлияет на какие-либо операторы Import или ImportMany, они должны разрешить перекомпоновку, иначе вы получите исключение. Например, если ваша сборка содержит другой IFooService экспорт ...
//Exception Thrown
[ImportMany(typeof(IFooService))]
private IEnumerable<IFooService> _myFooServices;

//No Exception Thrown
[ImportMany(typeof(IFooService), AllowRecomposition = true)]
private IEnumerable<IFooService> _myFooServices;


ПРИМЕЧАНИЕ. Вы активируете OnImportsSatisfied, если вы снова внедрили интерфейс IPartImportsSatisfiedNotification, поэтому убедитесь, что у вашего приложения из-за этого нет проблем.
...