Проблема с Prism RegionManager и контейнером Unity - PullRequest
1 голос
/ 17 марта 2011

У меня есть основной проект Silverilght и другие модули, и я использую Prism для их склеивания вместе с Unity для внедрения зависимостей.

У меня есть один из моих модулей, который зависит от IRegionManager, который,естественно, получает инъекцию от Unity.

Проблема, с которой я сталкиваюсь, заключается в том, что свойство Regions получаемого мной RegionManager не содержит никаких областей, даже если я объявил дваиз них в моей Shell следующим образом:

regions:RegionManager.RegionName="MainRegion"

Я не могу понять причину этого поведения.Я попытался зарегистрировать RegionManager как синглтон, используя

Container.RegisterInstance<IRegionManager>(new RegionManager());

, а также оставить единицу обработанной.Тем не менее, я получил те же результаты: (

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

_regionManager.RegisterViewWithRegion("MainRegion", typeof(MyView));

Вот почему мне нужно взять сам объект "MainRegion" и манипулировать им.

Я надеюсь, что кто-то понял это. Я был бы очень благодарен:)

Править: Я должен упомянуть, что обнаружение представлений работает просто отлично, я могу RegisterViewWithRegion, но когда я проверяю свойство Regions RegionManager, я нахожу его пустым!

1 Ответ

3 голосов
/ 22 марта 2011

, размышляя об этой проблеме и контексте, в котором она произошла, меня поразило, что, как и большинство ошибок в программном обеспечении, проблема была не там, где я искал!

Моя настройка была следующей: я начал с шаблона проекта Silverlight Business Application. это дало мне MainPage, который я использовал в качестве Shell, и пару просмотров (Home и About). Теперь вместо того, чтобы регионы располагались на моем Shell, я помещаю их в представление Home, сохраняя MainPage как мастер-страницу.

Мое предположение заключается в том, что Prism устанавливает RegionManager для Shell и передает его тому, кто в нем нуждается (используя контейнер для инъекций зависимости). Таким образом, когда я попросил IRegionManager в моем модуле, я получил тот для моего Shell, который действительно не содержит никакой области (отсюда и пустое свойство Regions).

Чтобы решить это, все, что мне нужно было сделать, это поместить мои регионы в правильное место: Оболочка , и теперь все работает хорошо (на).

Обновление : Похоже, мое "взятие на себя" на самом деле правильно :), это отрывок из Документация Prism : (под Области Scoped )

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

...