Prism v2:寻求澄清为什么模块需要"用shell注册视图类型"

Edw*_*uay 0 silverlight wpf prism

我正在阅读他们所说的Prism v2指南:

在初始化期间,模块使用RegionManager定位shell 中的区域并向这些区域添加一个或多个视图,或者注册要在这些区域内创建的一个或多个视图类型

我知道在引导程序中添加了视图,例如在GetModuleCatalog()方法中:

protected override IModuleCatalog GetModuleCatalog()
{
    ModuleCatalog catalog = new ModuleCatalog()
        .AddModule(typeof(HelloWorldModule.HelloWorldModule));
    return catalog;
}
Run Code Online (Sandbox Code Playgroud)

但注册视图类型意味着什么?为什么模块需要与shell"注册视图类型",如果他们已经像上面的代码一样"添加他们的视图"?

Szy*_*zga 5

在您的代码中,您不是将视图添加到引导程序,而是将模块添加到ModuleCatalog.CAB/Prism/Composite UI世界中的模块可以包含视图,但很多时候它提供了某种其他模块可以使用的附加服务.例如,假设我有一个Shell正好使用一些停靠管理器来显示视图.我希望模块使用API​​ IDockingWindowService来显示/隐藏窗口.我希望服务实现可以轻松互换,因此我创建了一个包含名为DockingWindowService的服务的Module,并实现了IDockingWindowService.我使用ModuleCatalog注册了该模块.

复合框架工作流将创建此服务,将其注册到引导程序,并且在此事实之后加载的任何模块都可以使用IDockingWindowService.这项服务不是一种观点,而是逻辑; 只是想指出这种区别.话虽这么说,模块可以包含0个或更多视图(或者,作为简化,UserControls).UI的单位是视图.模块更像是逻辑和/或UI捆绑概念.

回到您的特定问题:文档说的是,如果您使用区域来显示视图,则可以使用区域注册视图类型.每当显示Region时,它将使用Unity容器自动构建View.