Получение нового экземпляра оболочки из CompositionContainer в Prism 4 с помощью MEF - PullRequest
1 голос
/ 20 октября 2011

Я сталкиваюсь со странным поведением MEF в Призме, которое не могу объяснить.Я нашел способ обойти это, что меня не слишком устраивает, поэтому я действительно хотел бы понять, что его вызывает.

Я объявил свой класс окна оболочки с PartCreationPolicy из NonShared.И я пытаюсь использовать функцию CompositionContainer.GetExportedValue<>() из моего MefBootstrapper для создания нового экземпляра оболочки.

Странная вещь, если я вызываю Container.GetExportedValue<>() до того, как оболочка была создана,Я получаю новый объект типа Shell, каждый раз, когда я вызываю его.Однако после инициализации оболочки повторные вызовы Container.GetExportedValue<>() возвращают один и тот же экземпляр оболочки.

Как будто инициализация оболочки каким-то образом перерегистрирует мой экспорт оболочки как общий.

Однако я не вижу никаких вызовов в коде загрузчика, которые явно пытаются достичь этого.

Может кто-нибудь объяснить:

  1. какое действие имеет этот побочный эффект
  2. Как (если возможно) восстановить поведение NonShared, чтобы я мог создавать несколько оболочек с помощью MEF / ServiceLocator.

Cheers,

Mark

Ответы [ 2 ]

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

Я не уверен, как Prism использует MEF, но вот теория: как создается оболочка при обычном запуске? Я предполагаю, что это происходит не путем вызова GetExportedValue из контейнера MEF, а скорее путем вызова конструктора для Shell, а затем добавления его в контейнер через ComposeParts () или с помощью CompositionBatch. Часть, добавленная таким образом непосредственно в контейнер, будет переопределять то, что было доступно в каталоге, и CreationPolicy также не будет применяться (поскольку MEF не создает эту часть).

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

здесь - это ответ на ваш вопрос из нескольких оболочек. Вы должны проверить, ответили ли на поведение NonShared.

...