问题标签 [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.
wpf - 这两种在 Prism 中加载模块的方式有什么区别?
谁能解释这种在 Prism 中加载模块的方式之间的区别:
这样:_
我在演示中看到了这两种方式,但据我所知,它们做同样的事情,两者似乎都传递了我在模块中需要的容器和 regionManager:
silverlight - Silverlight MVVM Prism 和 OpenFileDialog
我目前正在开发 SilverLight 3 应用程序。我正在使用 MVVM 模式和棱镜。除了以下项目,我一切正常。在我的一个观点中,我必须使用 OpenFileDialog。我试图在 ViewModel 中执行此操作只是为了找出 SilverLight 的安全模型禁止它,因为它只允许由用户启动。我已经将 OpenFileDialog 代码移到了 View 的代码隐藏中。这是我的问题。虽然我已绑定到设置为 TwoWay 的源,但它并没有在我的 ViewModel 中点击属性的设置器。
带绑定的图像控件示例:
用户使用的按钮:
点击事件:
我的 ViewModel 正在实现 INotifyPropertyChanged 并具有以下属性。
如果我在 Setter 上设置一个断点。它永远不会击中它。
wpf - 寻找将自身加载到菜单中的模块的 Prism 示例
有谁知道使用 Prism 的 WPF 代码示例,其中每个模块都将自己注册为另一个模块内菜单中的菜单项?
(我目前有一个尝试使用 EventAggregator 执行此操作的应用程序,因此一个模块侦听来自其他模块的已发布事件,这些模块需要在菜单中将其标题作为菜单项,但我遇到了订单问题加载和线程等。我想找到一个使用经典棱镜结构的例子来做到这一点。)
我是这么想的:
Shell.xaml:
合约视图:
客户视图:
但据了解,我已经完成了非 Prism MVVM 应用程序结构,并且菜单总是很好地绑定到 ViewModel 中的 ObservableCollections ,上面似乎打破了这个很好的模式。以上是Prism中的惯用方法吗?
wpf - Prism 中注册的类型在哪里?
在Prism Commanding_Desktop QuickStart解决方案中,在 OrderModule 中,它定义了以下变量:
但是这是在哪里注册的,以便可以从容器中“解析”出来?我在下面看到OrdersRepository的注册位置,但我在项目中找不到 OrdersEditorPresentationModel的注册位置。
订单模块.cs:
OrdersEditorPresentationModel.cs:
上面解析的类型中的构造函数有一个特定的签名,但是这个签名是在哪里定义的:
我认为这可能是一些默认签名,但是 Prism 文档中的另一个示例,演示者构造函数具有不同的签名:
wpf - 有人可以解释 Prism 的 resolve<> 方法中发生的魔法吗?
我有一个带有以下 Initialize() 方法的CustomersModule.cs :
我从容器中解析的类如下所示:
TestWhatever类只是我创建的一个虚拟类:
然而,即使我从未注册过容器,容器也会愉快地解析 ,并且容器也会以某种方式找到TestWhatever,实例化它并将其注入.CustomersPresenter
CustomersPresenter
我很惊讶地意识到这一点,因为我在 Prism 文档中找不到任何地方明确指出容器是如此自动化。
所以这很好,但是容器还做了什么我不知道的事情,即它还能做什么我不知道的事情?例如,我是否可以从其他模块注入类,如果模块恰好被加载,容器将注入它们,如果没有,它会注入 null?
wpf - 如何在 Prism 中松散地引用模块,以便它们可以存在或不存在?
在这个 stackoverflow 问题中,我了解到Prism/Unity 并不像我想象的那样解耦,例如,如果我有一个将 menuManager 注入其构造函数的类,那么我必须确保这个类确实存在于某个地方(我认为你可以只需拉出包含类的 .dll,容器就会处理它,例如在其位置注入 null):
但我可以解决这个问题:如果没有 MenuModule,应用程序就无法运行(或者,正如建议的那样,我可以拥有一个NullMenuModule,它什么都不做,只是防止应用程序崩溃)。
但是,我正在构建的应用程序将在 MenuModule 中有一个MenuManager 类,并且每个模块都必须使用 MenuManager 注册它想要在菜单中拥有的所有内容。但是,我希望能够换掉 MenuModules例如有一个InfragisticsMenuModule并有一个TelerikMenuModule等。
但是,当我在客户模块中时,为了使用 TelerikMenuModule,我需要引用它。当我想使用 InfragisticsMenuModule 时,我需要参考它。
那么我如何能够在不使用新引用重新编译所有模块的情况下使用 InfragisticsMenuModule “热交换” TelerikMenuModule,例如,我想替换它:
有了这个:
并且只需重新启动应用程序,它就会使用新的 InfragisticsMenuModule.dll 运行,并且不会抱怨 TelerikMenuModule.dll 不再存在。
wpf - 在 Prism 中,如何将接口注入模块构造函数而不是类型?
在我的 prism 应用程序中,我在尝试获取 CustomerModule 类型的实例时收到错误 Activation error occurred, key \"\"。
这是因为我的客户模块我试图注入一个 IMenuManager 类型的“ menuManager ” :
但是,如果我将 CustomerModule 构造函数更改为注入类型而不是接口,那么它可以工作:
那么我需要在哪里注册我的 MenuManager 来实现 IMenuManager?似乎在 CustomerModule 的 Initialize 方法中注册它为时已晚。
回答:
我把它放在 ConfigureContainer() 中,它工作正常,一定要留在“base.ConfigureContainer()”中:
wpf - 为什么我注入的依赖对象在每个模块中都不是同一个实例?
我正在使用 Prism 和 Unity。
我有这个引导程序:
我的CustomerModule注入了一个 MenuManager 并向其中添加菜单项:
但是当我的MainMenuPresenter对象也注入 MenuManager 时,它不是同一个对象:
如何告诉 Prism/Unity 我希望注入的 MenuManager 是单例,以便将相同的对象注入到我的每个模块和对象中?
wpf - Prism 的 IContainer 和 IUnityContainer 有什么区别?
我有一个Prism项目,其中包含从各种来源获得的代码,一切运行良好,但我注意到在我注入的某些模块中
在我注入的其他模块中
IContainer 似乎只有组件、添加和删除,而 IUnityContainer 有几十个方法。
我经常将 IContainer 更改为 IUnityContainer 以便我可以使用后者的解析方法。这两者有什么区别,我为什么要使用 IContainer?
c# - MVVM、Prism 和服务发现
我正在使用 MVVM 模式和 Prism 框架编写应用程序(Silverlight 和 WPF)。在我的应用程序中,我有一个包含客户列表的网格。在此之下,我提供了提供客户详细信息的各种视图。所有信息都来自 WCF 服务,该服务提供来自查询的数据以及在接收到数据时触发事件的回调。更改网格中的选定项目时会更新详细信息。还有一个过滤视图控制详细信息的日期范围。
我还需要为特定客户实现一组类似的视图。提供的信息是相同的,因此显然最好重用相同的视图和模型类。
我最初的想法是为两种场景构建一个位于模型和 WCF 服务之间的单独中间服务。然后,我将通过按名称注册实例将模型绑定到特定服务。
不幸的是,这意味着我必须自己实例化很多类,而不是依赖我更喜欢的依赖注入。
那么,对于所有的 MVVM 专家,应该如何构建视图、模型和服务以最好地利用 Prism 框架的特性并促进代码重用?
非常感谢!
==== 编辑:添加以下文本和示例 ====
这是一个简单的例子,我希望能解释我想要完成的事情。
此客户视图模型基于客户在网格中的当前设计。选择客户会触发 SelectedCustomerChangedEvent,这将导致视图模型请求信息。
它由使用回调机制提供数据的底层 WCF 服务提供(数据可能需要很长时间才能检索/计算,因此简单的 WCF 调用将不起作用)。这工作得很好。问题是我想在应用程序的不同区域重用相同的视图和模型,以显示有关特定客户而不是当前选定客户的信息。
我最初的想法是创建一个中间服务来处理列表的 SelectedCustomerChangedEvent 以及打开客户特定视图时的类似事件。然后它将通过相同的 CustomerInfoUpdatedEvent 向模型提供数据。
问题是,由于我现在有 2 个服务实现了相同的接口,我需要为它们命名,然后让视图模型以某种方式知道从容器中检索哪一个。
我知道我可能犯了设计错误。好消息是我有时间修复它,但我不知道如何修复它。