В regionmanager нет регионов, использующих внедрение зависимостей Microsoft в приложении prism (7.2)

#c# #wpf #.net-core-3.1 #prism-7

#c# #wpf #.net-core-3.1 #prism-7

Вопрос:

Я использую Prism v7.2.0.1422 для приложения WPF с .net Core 3.1. Я использую внедрение зависимостей Microsoft для DI.

Я не хочу использовать контейнер Unity. regionAdapterMappings пуст. Обнаружение вида и внедрение представления не работают. что мне нужно, чтобы иметь возможность регистрировать регионы в RegionManager?

MyPrismApplication.cs

         public abstract class MyPrismApplication : PrismApplicationBase
        {            
            protected override IContainerExtension CreateContainerExtension()
            {
                return PrismContainerExtension.Current;
            }

            protected override void RegisterRequiredTypes(IContainerRegistry containerRegistry)
            {
                base.RegisterRequiredTypes(containerRegistry);
    
                containerRegistry.RegisterSingleton<IRegionNavigationContentLoader, RegionNavigationContentLoader>();
                containerRegistry.RegisterSingleton<IServiceLocator, MicrosoftServiceLocatorAdapter>();
            }
    
            protected override void ConfigureRegionAdapterMappings(RegionAdapterMappings regionAdapterMappings)
            {
                base.ConfigureRegionAdapterMappings(regionAdapterMappings);
    
                //Fix bug when RegionAdapterMappings are not registered into dependency container
                PrismContainerExtension.Current.RegisterInstance(regionAdapterMappings);
            }             
            
        }
  

логическое значение requireresebuild уничтожает все экземпляры внутри контейнера.

Prism v7.2.0.1422. .net Core 3.1 Prism.Контейнер.Расширения версии 7.2.054.

Ответ №1:

В настоящее время это не то, что поддерживается из коробки. Если вы посмотрите на исходный код Prism 7.2 либо для DryIoc, либо для Unity, вы увидите, что существует некоторая дополнительная работа с контейнером, которая не может быть абстрагирована в расширениях prismcontainer. В частности, вам нужно будет создать ServiceLocatorAdapter.

Это требование отменяется для Prism 8, однако у меня не было времени обновить расширения контейнера Prism для Prism 8 и не будет до следующего предварительного просмотра Prism 8. В то же время я предлагаю открыть выпуск на GitHub, чтобы отслеживать поддержку WPF для Microsoft.Расширения.Контейнер DependencyInjection.

Комментарии:

1. спасибо, но я уже внедрил ServiceLocatorImplBase.