В настоящее время я пытаюсь объединить MEF и PRISM для работы друг с другом.Пока все работает нормально.Теперь я хотел бы использовать обнаружение модуля времени выполнения MEF (DeploymentCatalog), который будет использоваться для загрузки XAP из каталога сервера, а затем подключить его к одному из регионов внутри моего MAIN UI.
Я использую UnityBootStrapper и внутри этогоКласс I также интегрированный контейнер MEF.Этот пример приложения основан на блоке Гленна (http://codebetter.com/glennblock/2010/01/03/mef-and-prism-exploration-mef-module-loading/).
. Следующий код используется для инициализации CompositionContainer внутри моего загрузчика:
// This is the host catalog which contains all parts of running assembly.
var catalog = GetHostCatalog();
// Create MEF container which initial catalog
var container = new CompositionContainer(catalog);
// here we explicitly map a part to make it available on imports elsewhere, using
// Unity to resolve the export so dependencies are resolved
// We do this because region manager is third-party ... therefore, we need to
// export explicitly because the implementation doesn't have its own [export] tag
container.ComposeExportedValue<IRegionManager>(Container.Resolve<IRegionManager>());
container.ComposeExportedValue<IEventAggregator>(Container.Resolve<IEventAggregator>());
// Obtain CatalogService as a singleton
// All dynamic modules will use this service to add its parts.
Container.RegisterInstance<ICatalogService>(new CatalogService(catalog));
// Initialize the container
CompositionHost.Initialize(container);
Теперь у меня есть другой класс, который называется DeploymentCatalogService, который используется для загрузки XAPс сервера. Текущая проблема, с которой я сталкиваюсь, заключается в том, что в методе инициализации DeploymentCatalogService контейнер CompositionHost пытается снова инициализировать свой контейнер с aggregateCatalog.
_aggregateCatalog = new AggregateCatalog();
_aggregateCatalog.Catalogs.Add(new DeploymentCatalog());
CompositionHost.Initialize(_aggregateCatalog);
Это вызывает исключение, в котором указано, что контейнер уже инициализирован..Есть ли способ использовать существующий контейнер и обновить его новым агрегатным каталогом?
Надеюсь, это не слишком запутанно. Пожалуйста, будьте добры, я все еще новичок в MEF.
Приветствия,