从 Prism 7 迁移到 Prism 8

Migration from Prism 7 to Prism 8

我正在尝试从 Prism 7.1.0.431 升级到 8.1.97,但遇到了几个问题。

我认为我最大的问题在于将“CommonServiceLocator.ServiceLocator.Current”替换为“Prism.Ioc.ContainerLocator.Container”。 (我知道这是一种反模式,...但这不是重点)

我不知道如何替换:ServiceLocator.Current.GetAllInstances<>()

例如,在这行代码中,我获得了应分配给用户的应用程序(在模块中)的所有可用权限:

IEnumerable 权限 = ServiceLocator.Current.GetAllInstances().SelectMany(c => c.Rights).Distinct();

我怎样才能用 Prism 8 做同样的事情?

我用Unity。

非常感谢您的帮助。

如果您不喜欢 Prism 的容器抽象,可以使用特定于容器的静态方法GetContainer 来访问底层容器:

using Prism.Unity;

IEnumerable rights = ContainerLocator.Container.GetContainer().GetAllInstances<CheckNavigationRights>().SelectMany(c => c.Rights).Distinct();

顺便说一句:您可以注入或解析 IEnumerable<CheckNavigationRights> 以获得所有命名的注册。