Prism 5 Navigation с Виндзорским замком

Я хотел использовать Виндзорский замок в качестве IoC и призму для mvvm в своем пользовательском интерфейсе.

Поэтому я регистрирую все свои классы в загрузчике Windsor:

            Container.Register(
            Classes.FromThisAssembly()
                .Pick()
                .WithServiceAllInterfaces()
                .WithServiceSelf()
                .WithServiceBase()
                .LifestyleTransient());

Затем я хочу перейти к моему представлению:

RegionManager.RequestNavigate(RegionNames.SideBarRegion, "PreEventNavigationView");

Затем выбрасывается исключение. Важная информация из трассировки стека:

{"Activation error occurred while trying to get instance of type Object, key \"PreEventNavigationView\""}

И

{"Requested component named 'PreEventNavigationView' was not found in the container. Did you forget to register it?\r\nThere are 55 other components supporting requested service 'System.Object'. Were you looking for any of them?"}

Я предположил, что мне нужно зарегистрировать свои компоненты для system.object, но это тоже не помогло. С этим мой пользовательский интерфейс не работает, и я получаю какое-то странное поведение:

        Container.Register(
            Component.For<PreEventNavigationView,System.Object>()
                .ImplementedBy<PreEventNavigationView>().LifestyleSingleton());

Кажется, я где-то читал, что НЕ должен регистрировать объект в Виндзорском замке. Как я могу правильно использовать Prism Navigation с Виндзорским замком или это невозможно?


person Joerg    schedule 02.10.2015    source источник


Ответы (1)


Проблема была в этой части:

        Container.Register(
        Classes.FromThisAssembly()
            .Pick()
            .WithServiceAllInterfaces()
            .WithServiceSelf()
            .WithServiceBase()
            .LifestyleTransient());

Я зарегистрировал их только с полным пространством имен (или виндзор делает это по умолчанию), а не только с именем класса. Итак, есть 2 души:

RegionManager.RequestNavigate(RegionNames.SideBarRegion, "Full.NameSpace.PreEventNavigationView");

or

        Container.Register(
        Classes.FromThisAssembly()
            .Pick()
            .Configure(registration => registration.Named(registration.Implementation.Name))
            .WithServiceAllInterfaces()
            .WithServiceSelf()
            .WithServiceBase()
            .LifestyleTransient());
person Joerg    schedule 02.10.2015