问题标签 [prism-6]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
284 浏览

c# - 使用 Prism 和 MEF 多次初始化静态变量

语境

我有一InteractionWindowPresenter堂课负责创建 Windows。其中一些可能是模态的,我想保留打开的模态窗口数量的计数器,以便通知应用程序的其他部分。

因此,我_modalsCount在类中添加了一个变量,每当打开或关闭模式窗口时都会更新:

初始化后,每个Prism 模块- 即。每个类都实现IModule- 实例化一个 InteractionWindowPresenter必须在 Window 上显示并持有对它的引用的每个视图。例如:

该类InteractionWindowPresenter在所有模块以及其他基础结构组件直接引用的基础结构组件中定义。启动器应用程序不引用它,它只是一个MefBootstrapper. 因此,MEF用于合成。

问题

在初始化行设置断点_modalsCount表明在InteractionWindowPresenter创建实例时不会执行断点。相反,它是在每个模块中使用变量的第一次(也是唯一一次)执行 - 即。第一次Show从每个模块调用该方法。因此,每个模块都有自己的价值,在该特定模块的所有实例中共享。

我知道懒惰的评估是由于beforefieldinit. 但是,我希望整个应用程序而不是每个模块的评估只发生一次。

我还尝试在静态构造函数中执行初始化:

在这种情况下,静态构造函数在实例构造函数执行之前被调用,但每次创建实例时。因此,变量似乎不再是静态的。

据我了解,static变量每AppDomain. 因此,由于我所有的程序集(模块和基础结构)都在同一个AppDomain中,因此不应该发生这种情况。这两个假设中的任何一个我错了吗?

到目前为止采用的解决方法

创建一个简单的类来保存计数器可以避免这个问题:

因此将调用替换为_modalsCount

和:


那么我在这里错过了什么?我是否以某种方式误解了静态变量的生命周期和范围,还是 Prism 模块和/或 MEF 惹恼了我?

0 投票
2 回答
2392 浏览

prism - Prism 6 的 XAML 命名空间

几个月来,我一直在使用带有以下 XAML 命名空间声明的 Prism 6:

但我注意到这个命名空间 URL(重定向到 GitHub)也存在:

请确认使用哪个命名空间是正确的?

0 投票
4 回答
7546 浏览

c# - Prism:如何使用 Unity Bootstrapper 在 Shell 区域中加载默认视图

当我查看Prism Navigation QuickStart 演示时,它使用Mef Bootstrapper并使用文件中的IPartImportsSatisfiedNotification接口Shell.xaml.cs将默认视图加载到 Shell 区域,如下所示。

在我的项目中,我使用Unity Bootstrapper并尝试参考这个演示来加载默认视图。正如预期的那样,它完全不起作用。

请分享关于“如何使用 Unity Bootstrapper 将默认视图注入 Shell 区域”的建议和一些建议。

0 投票
2 回答
4568 浏览

prism-6 - 将 Prism 4 迁移到 Prism 6 - CompositePresentationEvent

我想将使用 Prism 4 编写的项目迁移到 Prism 6 中。

在 Prism 4 中,CompositePresentationEvent<T>类型位于Microsoft.Practices.Composite.Presentation.Events命名空间下。

但是当我从 nugget 中提取 Prism 6 并删除旧的 Prism 4 引用时,我在 Prism 6 命名空间中的任何地方都看不到这种事件类型。

任何人都可以帮我一点吗?

0 投票
1 回答
798 浏览

c# - UWP 导航导致访问冲突

我正在将我的 WP 8.1 应用程序转换为 UWP,因为我对使用 prism 很感兴趣,所以我想我会从头开始构建我的应用程序。我创建了一个带有导航到另一个页面的按钮的页面,部署了应用程序并试了一下。当我单击按钮进行导航时,将执行以下代码

然后使应用程序崩溃。当我查看 VS2015 中的输出窗口时,我在底部看到以下内容。

The program '[4760] MyApp.exe' has exited with code -1073741819 (0xc0000005) 'Access violation'.

两个页面都有 ViewModels 并使用 Prisms 设置ViewModelLocator.AutoWireViewModel。我尝试清除 ViewModels 的所有属性,因此它们是空的,没有代码,但什么也没做。在视图模型构造函数中放置一个断点,它在调试时确实到达了这一点。

任何想法这意味着什么或在哪里看?

更新:问题看起来是由控制模板引起的。我通过注释掉所有 XAML 然后将内容一一添加,将问题缩小到按钮控件。然后我找到了导致问题的控件,因此删除了绑定和样式模板。重新添加绑定,一切正常,重新添加模板并出现问题。

0 投票
1 回答
621 浏览

c# - Prism 6 UriQuery 类丢失?

有谁知道UriQueryPrism 6 中的班级发生了什么?只是按照教程,它说它在Microsoft.Practices.Prism但由于命名空间都发生了变化,我找不到它。

0 投票
0 回答
176 浏览

c# - 登录后加载用户模块

该应用程序具有登录页面,该页面由后端服务器进行身份验证。然后应用程序可以请求用户的角色。基于角色,应用程序需要为用户加载模块。注销将关闭应用程序(至少现在是这样)。

该应用程序使用最新版本的 Unity Bootstrapper、Prism-6、wpf 并且是桌面版。

我怎样才能做到这一点?

0 投票
1 回答
475 浏览

wpf - 文化改变后wpf prism 6刷新视图

Shell 有 2 个区域:menu 和 main

  • MenuModuleMenuView没有填满菜单区域
  • WelcomModuleWelcomeView没有填满主要区域
  • WelcomeView用于DynamicResource标签内容

MenuModule处理文化变革:

  • 改变文化
  • 更改资源字典
  • 发布事件LanguageChangedEvent

WelcomeModule订阅LanguageChangedEvent

如何刷新视图以便DynamicResource根据更改的字典重新加载?

0 投票
1 回答
952 浏览

unit-testing - 使用 Moq、Prism 6 和事件聚合进行单元测试

我想通过事件聚合向模块抛出消息来对模块进行单元测试,以确保它适当地响应,或者通过适当地设置属性,或者通过发布其他消息作为结果。我正在使用 Prism 6。在我的项目中,基础设施项目具有:

ModuleA 发布如下消息:

ModuleB 收到这样的消息:

这是 HandleImportantMessage:

ModuleB 构造函数调用如下:

此构造函数由 Prism 框架调用。对于单元测试,我需要创建一个 ModuleB 实例,并传递一个 IEventAggregator,它可能是 Moq 创建的一个假的。我想以这样一种方式做到这一点,即我发布的消息带有importantString。如果我在 Google 上搜索“带有最小起订量和事件聚合的单元测试”这一短语,有几个参考文献,但我没有看到如何使用这些方法中的任何一种将“importantString”从 ModuleA 传递到 ModuleB。Prism 5 的示例代码创建了一个假事件聚合器,但没有使用 Moq。我不明白它是如何工作的,也不知道如何用它传递一个字符串。

我的测试代码开始是这样的:

我看到的一些参考资料适用于 .Returns(eventBeingListenedTo.Object); 应用安装程序后到 moqEventAggregator。我显然需要将 .Setup(something) 应用到 moqImportantMessage 以传递重要字符串,但我还没有看到确切的内容。

我错过了什么?如何传递带有虚假发布消息的字符串?

0 投票
1 回答
762 浏览

c# - C++/CLI 项目如何引用可移植类库?

我们有一堆引用 Prism.Core 的 C# 代码。Prism.Core 是一个可移植的类库。当我们在 C++/CLI 中引用它并尝试使用委托命令时,我们得到:

C4691:“System::Object”:在未引用的程序集“System.Runtime”中需要引用类型,而是在当前翻译单元中定义的类型

谁能解释为什么?除了重建源代码之外,还有什么方法可以修复,因为 Prism 被 Nugeted 到我们的 c# 源代码中,所以我不想这样做?