0

我正在将 Prism v7.2.0.1422 用于带有 .net Core 3.1 的 WPF 应用程序。我正在为 DI 使用 Microsoft 依赖注入。

我不想使用 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);
            }             
            
        }

布尔值 requiresRebuild 销毁容器内的所有实例。

棱镜 v7.2.0.1422。.net Core 3.1 Prism.Container.Extensions v7.2.0.54。

4

1 回答 1

0

这不是目前开箱即用的支持。如果您回顾一下DryIocUnity的 Prism 7.2 源代码,您会发现有一些额外的容器工作无法在 PrismContainerExtensions 中抽象出来。具体来说,您需要创建 ServiceLocatorAdapter。

这个要求在 Prism 8 中消失了,但是我没有时间更新 Prism 8 的 Prism Container Extensions 并且直到下一个 Prism 8 预览版之后才会更新。同时,我建议在GitHub 上打开一个问题来跟踪 WPF 对 Microsoft.Extensions.DependencyInjection 容器的支持。

于 2020-08-19T14:41:30.610 回答