Контекст
Я ищу способ построения системы с использованием PRISM и Unity в приложении Silverlight, чтобы у меня был контроллер сценариев использования, который управляет навигацией и другими вещами, связанными с конкретным сценарием использования. Этот контроллер варианта использования должен иметь свой собственный контейнер для единства, чтобы я мог изолировать зависимости, необходимые для этого варианта использования.
код
Следующий фрагмент используется для инициализации контроллера сценариев использования и его настройки таким образом, чтобы он использовал правильный дочерний контейнер.
public class MyController
{
private IUnityContainer _container;
public MyController(IUnityContainer container)
{
_container = container;
_container.RegisterType<Object,ChildView>(ModuleViews.MyChildView);
}
[Dependency]
public IRegionManager RegionManager { get; set; }
public StartUseCase()
{
// This results in a resolve action for System.Object instead of the view I registered
// in the child container
this.RegionManager.RequestNavigate(ModuleRegions.ChildRegion,ModuleViews.MyChildView);
}
public static MyController Create(IUnityContainer container)
{
var childContainer = container.CreateChildContainer();
childContainer.RegisterInstance<IUnityContainer>(childContainer);
// The container view is registered in the parent container
var containerView = container.Resolve<Object>(GlobalViews.MyContainerView);
var childRegionManager = parentRegionManager.Regions[GlobalRegions.MainRegion].Add(containerView,GlobalViews.MyContainerView,true);
childContainer.RegisterInstance<IRegionManager>(childRegionManager);
var controller = childContainer.Resolve<MyController>();
return controller;
}
}
Задача
Основы работают, но когда я пытаюсь использовать RegionManager.TryNavigate(...)
, он не разрешает представление с указанным именем. Я зарегистрировал представление с правильным именем в дочернем контейнере, но очевидно, что RegionManager, который я получил в своем контроллере вариантов использования, каким-то образом разрешает только те представления, которые я зарегистрировал в корневом контейнере.
Мой вопрос
Что мне нужно сделать, чтобы правильно разрешить дочернее представление, не регистрируя его в контейнере родительского единства.