【问题标题】:How to use prism scoped RegionManager in a modular app?如何在模块化应用程序中使用棱镜范围的 RegionManager?
【发布时间】:2021-06-24 01:08:13
【问题描述】:

在 prism 文档中,以某种方式创建了一个作用域 RegionManager

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

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

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

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

我最终做了我在this answer 中写的内容,但我的经理说我在视图模型中创建RegionManager 违反了 MVVM。

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

【问题讨论】:

    标签: c# wpf mvvm prism plugin-architecture


    【解决方案1】:

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

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

    无论如何,你不要打电话给new,因为容器会为你做这件事。

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

    【讨论】:

      猜你喜欢
      • 2012-01-04
      • 2012-01-05
      • 2012-09-28
      • 1970-01-01
      • 2017-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-30
      相关资源
      最近更新 更多