0

在棱镜文档RegionManager中,以某种方式创建了一个作用域,如下所示:

IRegion detailsRegion = this.regionManager.Regions["DetailsRegion"];
View view = new View();
bool createRegionManagerScope = true;
IRegionManager detailsRegionManager = detailsRegion.Add(view, null, 
                            createRegionManagerScope);

我有一个模块化应用程序,其中视图位于另一个模块中,并且该区域位于主程序集中。每个模块中都有一些区域,我希望它们具有相同的视图,然后相同的视图位于主程序集中。这张图可以更好地解释它:

在此处输入图像描述

因此,如果我想region.Add在模块中使用该方法,我无法实例化视图,因为它位于主程序集中。

我想到的另一种方法是使用视图发现,即使用RegisterViewWithRegion(string regionName, Type viewType),因为我可以在我可以访问的主程序集中调用此方法viewType,并使用regionName我在模块中传递给此方法的方法。但问题是模块中不能有同名的区域。

我最终做了我在这个答案中写的,但是我的经理说我通过RegionManager在视图模型中创建违反了 MVVM。

RegionManager在这种情况下使用范围的正确方法是什么?

4

1 回答 1

0

首先,模块与视图无关——模块是软件的后期绑定、可互换部分。

因此,如果我想region.Add在模块中使用该方法,我无法实例化视图,因为它位于主程序集中。

无论如何,您不会调用new,因为容器会为您执行此操作。

因此,您将工厂注入想要创建视图的类(最简单的方法是 a Func<View>),并且该类使用工厂来创建视图。在这种情况下,视图或工厂的代码驻留在哪里根本不重要,只要您有接口(这与 an 不同interface,尽管它interface位于本身不属于任何模块的第三个程序集中是常见的)模块可以用来相互交谈的地方。

于 2021-03-27T10:33:42.080 回答