Prism 7.1中的模块注册

时间:2018-09-28 21:50:07

标签: wpf prism

在Prism 7.1中,IModule接口已从6.3版更改,现在公开了两个方法 RegisterTypes (IContainerRegistry containerRegistry)和 OnInitialized (IContainerProvider containerProvider)。我请求原谅,但是我不明白如何注册在模块中实现的视图。它可能是如此简单,以至于我看不到问题的解决方案。您能给我一个例子,让我最终理解我该怎么做吗?无论到哪里看,我都只发现有关版本6.3的示例,我对此非常了解。

2 个答案:

答案 0 :(得分:2)

Prism 7.X在DI容器周围引入了一种抽象。造成这种情况的原因很多,但最重要的两个是:

  1. 从社区到Prism团队的许多支持问题都围绕如何使用与Prism团队无关的容器来做。
  2. 通过抽象化容器,可以简化共享代码和换出容器的场景。

重要的是要了解,通过抽象化Container,我们还对负责注册View的Container Extensions进行了更改。具体来说,我们现在将它们放在IContainerRegistry上。因此,此处给出了示例Prism 6.X模块:

public class ModuleA
{
    private IUnityContainer _container { get; }

    public ModuleA(IUnityContainer container)
    {
        _container = container;
    }

    public void Initialize()
    {
        // register stuff
        _container.RegisterViewForNavigation<ViewA>();

        // Setup Event listeners etc...
        var ea = _container.Resolve<IEventAggregator>();
    }
}

我们将其更新为:

public class ModuleA
{
    public void OnInitialized(IContainerProvider containerProvider)
    {
        // Setup Event listeners etc...
        var ea = containerProvider.Resolve<IEventAggregator>();
    }

    public void RegisterTypes(IContainerRegistry containerRegistry)
    {
        // register stuff
        containerRegistry.RegisterForNavigation<ViewA>();
    }
}

答案 1 :(得分:0)

  

它可能是如此简单,以至于我看不到问题的解决方法

只需使用RegisterTypes-毕竟,注册视图就是注册类型。