问题标签 [prism]

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 投票
1 回答
2283 浏览

wpf - 这两种在 Prism 中加载模块的方式有什么区别?

谁能解释这种在 Prism 中加载模块的方式之间的区别:

这样:_

我在演示中看到了这两种方式,但据我所知,它们做同样的事情,两者似乎都传递了我在模块中需要的容器和 regionManager:

0 投票
2 回答
2426 浏览

silverlight - Silverlight MVVM Prism 和 OpenFileDialog

我目前正在开发 SilverLight 3 应用程序。我正在使用 MVVM 模式和棱镜。除了以下项目,我一切正常。在我的一个观点中,我必须使用 OpenFileDialog。我试图在 ViewModel 中执行此操作只是为了找出 SilverLight 的安全模型禁止它,因为它只允许由用户启动。我已经将 OpenFileDialog 代码移到了 View 的代码隐藏中。这是我的问题。虽然我已绑定到设置为 TwoWay 的源,但它并没有在我的 ViewModel 中点击属性的设置器。

带绑定的图像控件示例:

用户使用的按钮:

点击事件:

我的 ViewModel 正在实现 INotifyPropertyChanged 并具有以下属性。

如果我在 Setter 上设置一个断点。它永远不会击中它。

0 投票
2 回答
11401 浏览

wpf - 寻找将自身加载到菜单中的模块的 Prism 示例

有谁知道使用 Prism 的 WPF 代码示例,其中每个模块都将自己注册为另一个模块内菜单中的菜单项?

(我目前有一个尝试使用 EventAggregator 执行此操作的应用程序,因此一个模块侦听来自其他模块的已发布事件,这些模块需要在菜单中将其标题作为菜单项,但我遇到了订单问题加载和线程等​​。我想找到一个使用经典棱镜结构的例子来做到这一点。)

我是这么想的:

Shell.xaml:

合约视图:

客户视图:

但据了解,我已经完成了非 Prism MVVM 应用程序结构,并且菜单总是很好地绑定到 ViewModel 中的 ObservableCollections ,上面似乎打破了这个很好的模式。以上是Prism中的惯用方法吗?

0 投票
1 回答
107 浏览

wpf - Prism 中注册的类型在哪里?

Prism Commanding_Desktop QuickStart解决方案中,在 OrderModule 中,它定义了以下变量:

但是这是在哪里注册的,以便可以从容器中“解析”出来?我在下面看到OrdersRepository的注册位置,但我在项目中找不到 OrdersEditorPresentationModel的注册位置。

订单模块.cs:

OrdersEditorPresentationModel.cs:

上面解析的类型中的构造函数有一个特定的签名,但是这个签名是在哪里定义的:

我认为这可能是一些默认签名,但是 Prism 文档中的另一个示例,演示者构造函数具有不同的签名

0 投票
2 回答
1040 浏览

wpf - 有人可以解释 Prism 的 resolve<> 方法中发生的魔法吗?

我有一个带有以下 Initialize() 方法的CustomersModule.cs :

我从容器中解析的类如下所示:

TestWhatever类只是我创建的一个虚拟类:

然而,即使我从未注册过容器,容器也会愉快地解析 ,并且容器也会以某种方式找到TestWhatever,实例化它并将其注入.CustomersPresenterCustomersPresenter

我很惊讶地意识到这一点,因为我在 Prism 文档中找不到任何地方明确指出容器是如此自动化。

所以这很好,但是容器还做了什么我不知道的事情,即它还能做什么我不知道的事情?例如,我是否可以从其他模块注入类,如果模块恰好被加载,容器将注入它们,如果没有,它会注入 null?

0 投票
2 回答
1198 浏览

wpf - 如何在 Prism 中松散地引用模块,以便它们可以存在或不存在?

这个 stackoverflow 问题中,我了解到Prism/Unity 并不像我想象的那样解耦,例如,如果我有一个将 menuManager 注入其构造函数的类,那么我必须确保这个类确实存在于某个地方(我认为你可以只需拉出包含类的 .dll,容器就会处理它,例如在其位置注入 null):

但我可以解决这个问题:如果没有 MenuModule,应用程序就无法运行(或者,正如建议的那样,我可以拥有一个NullMenuModule,它什么都不做,只是防止应用程序崩溃)。

但是,我正在构建的应用程序将在 MenuModule 中有一个MenuManager 类,并且每个模块都必须使用 MenuManager 注册它想要在菜单中拥有的所有内容。但是,我希望能够换掉 MenuModules例如有一个InfragisticsMenuModule并有一个TelerikMenuModule等。

但是,当我在客户模块中时,为了使用 TelerikMenuModule,我需要引用它。当我想使用 InfragisticsMenuModule 时,我需要参考它。

那么我如何能够在不使用新引用重新编译所有模块的情况下使用 InfragisticsMenuModule “热交换” TelerikMenuModule,例如,我想替换它:

有了这个:

并且只需重新启动应用程序,它就会使用新的 InfragisticsMenuModule.dll 运行,并且不会抱怨 TelerikMenuModule.dll 不再存在

0 投票
2 回答
2353 浏览

wpf - 在 Prism 中,如何将接口注入模块构造函数而不是类型?

在我的 prism 应用程序中,我在尝试获取 CustomerModule 类型的实例时收到错误 Activation error occurred, key \"\"

这是因为我的客户模块我试图注入一个 IMenuManager 类型的“ menuManager ” :

但是,如果我将 CustomerModule 构造函数更改为注入类型而不是接口,那么它可以工作

那么我需要在哪里注册我的 MenuManager 来实现 IMenuManager?似乎在 CustomerModule 的 Initialize 方法中注册它为时已晚。

回答:

我把它放在 ConfigureContainer() 中,它工作正常,一定要留在“base.ConfigureContainer()”中:

0 投票
1 回答
293 浏览

wpf - 为什么我注入的依赖对象在每个模块中都不是同一个实例?

我正在使用 Prism 和 Unity。

我有这个引导程序

我的CustomerModule注入了一个 MenuManager 并向其中添加菜单项:

但是当我的MainMenuPresenter对象也注入 MenuManager 时,它不是同一个对象:

如何告诉 Prism/Unity 我希望注入的 MenuManager 是单例,以便将相同的对象注入到我的每个模块和对象中?

0 投票
1 回答
1287 浏览

wpf - Prism 的 IContainer 和 IUnityContainer 有什么区别?

我有一个Prism项目,其中包含从各种来源获得的代码,一切运行良好,但我注意到在我注入的某些模块中

在我注入的其他模块中

IContainer 似乎只有组件、添加和删除,而 IUnityContainer 有几十个方法。

我经常将 IContainer 更改为 IUnityContainer 以便我可以使用后者的解析方法。这两者有什么区别,我为什么要使用 IContainer?

0 投票
2 回答
1563 浏览

c# - MVVM、Prism 和服务发现

我正在使用 MVVM 模式和 Prism 框架编写应用程序(Silverlight 和 WPF)。在我的应用程序中,我有一个包含客户列表的网格。在此之下,我提供了提供客户详细信息的各种视图。所有信息都来自 WCF 服务,该服务提供来自查询的数据以及在接收到数据时触发事件的回调。更改网格中的选定项目时会更新详细信息。还有一个过滤视图控制详细信息的日期范围。

我还需要为特定客户实现一组类似的视图。提供的信息是相同的,因此显然最好重用相同的视图和模型类。

我最初的想法是为两种场景构建一个位于模型和 WCF 服务之间的单独中间服务。然后,我将通过按名称注册实例将模型绑定到特定服务。

不幸的是,这意味着我必须自己实例化很多类,而不是依赖我更喜欢的依赖注入。

那么,对于所有的 MVVM 专家,应该如何构建视图、模型和服务以最好地利用 Prism 框架的特性并促进代码重用?

非常感谢!

==== 编辑:添加以下文本和示例 ====

这是一个简单的例子,我希望能解释我想要完成的事情。

此客户视图模型基于客户在网格中的当前设计。选择客户会触发 SelectedCustomerChangedEvent,这将导致视图模型请求信息。

它由使用回调机制提供数据的底层 WCF 服务提供(数据可能需要很长时间才能检索/计算,因此简单的 WCF 调用将不起作用)。这工作得很好。问题是我想在应用程序的不同区域重用相同的视图和模型,以显示有关特定客户而不是当前选定客户的信息。

我最初的想法是创建一个中间服务来处理列表的 SelectedCustomerChangedEvent 以及打开客户特定视图时的类似事件。然后它将通过相同的 CustomerInfoUpdatedEvent 向模型提供数据。

问题是,由于我现在有 2 个服务实现了相同的接口,我需要为它们命名,然后让视图模型以某种方式知道从容器中检索哪一个。

我知道我可能犯了设计错误。好消息是我有时间修复它,但我不知道如何修复它。