- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个使用 MEF 和 PRISM 的应用程序(只是一个测试)。
加载一些符合特定接口(interface)的导出是相当容易的并将它们传递给正在加载的模块的构造函数,但我正在尝试做一些不同的事情。
当应用程序启动时,它会导入 IControllerClient 的实现。然后需要配置创建的实例(例如通过 shell),之后应用程序中的每个模块都应该有权访问它。
我不想在 Shell 或一些公开的辅助类上拥有公共(public)属性这种情况可能会被认为是一种不好的做法......我真的不喜欢它。
更新: 改写下面的问题
我们在现有框架中定义了许多接口(interface),通常这些是使用 MEF 加载到各种应用程序中。
我能够将它们加载到 Prism 应用程序的模块中,例如:
[ImportingConstructorAttribute()]
public HelloWorldView(IDataTransportService dataTransportService,
IMessageFactory messageFactory,
IDataFactory dataFactory,
IDataProcessor dataProcessor,
IDataCollector dataCollector)
{
var client = new ControllerClient(dataTransportService,
messageFactory,
dataProcessor
dataCollector);
}
在这种情况下,模块会创建 ControllerClient 类的有效实例。
但是我不想将这些接口(interface)传递给构造函数,而是想要一个模块像这样的构造函数:
[ImportingConstructorAttribute()]
public HelloWorldView(IClient client)
{
this.client = client;
}
IClient 实现 (ControllerClient) 的构造函数具有[ImportingConstructorAttribute()] 所以我希望注入(inject)依赖关系此时自动...但是使用此代码,甚至从未达到构造函数。
我想要的是有一个 IClient 接口(interface)的实例,它被应用程序中的所有模块。 (我现在明白 Shared 是 MEF 导入的默认值)。
执行此操作的最佳方法是什么?为什么我不能有一个采用 IClient 的模块构造函数,如果我想以这种方式公开一个类的实例,如果它不知道 mef,该怎么办?
那么在 mef/prism 应用程序中,您将在哪里定义这个可以被所有模块使用的实例?这就是通常所说的服务(但我只能找到有关使用 unity/prism 公开服务的指南)。
我希望这次我能更好地解释我的问题。
更新 2:由于 MEF 导入默认是共享的,我可以在每个模块中导入 IClient 实现,但是我需要弄清楚为什么没有注入(inject)依赖项
最佳答案
对于 MEF,共享是默认设置,因此接口(interface)的每次导入都将解析为同一个实例。该实例的配置可以发生在类的构造函数中,或者您可以实现 IPartImportsSatisfiedNotification在您的“单例”服务类上,当 MEF 完成解析您的类导入时,它将回调。
阅读您更新后的描述,听起来您无法在其构造函数中或在解析其导入后配置该类,因为您需要一些额外的上下文信息。如果是这种情况,您可以做的是在您的 Shell 中手动配置该类,并在使用容器的 ComposeParts 方法创建 Export 后手动添加它。这将使您的“已配置”实例成为将用于解析您已应用于该类的任何 [Export] 标签的实例。当然,在通过依赖于实例的容器构造任何其他内容之前,您必须执行此操作。
关于c# - 配置单例并将其公开给 MEF/PRISM 应用程序中的所有模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3397634/
我想将使用 Prism 4 编写的项目迁移到 Prism 6。 在 Prism 4 中 CompositePresentationEvent类型位于Microsoft.Practices.Compos
Pattern of pub-sub events is that the publisher should not know or care if there are any subscribers
我刚刚使用 MVVMLight、PRISM 和 DryIoc 启动了我的第一个 WPF 应用程序。 App.xaml 引用 prism:PrismApplication,如 https://prism
Microsoft 的 Patterns and Practices 提供的示例非常有用: 大约六个更简单的快速入门 其中涉及具体问题 股票交易者引用实现 ,这是一个相当全面的应用程序 但它缺乏更有用
prism 中共享服务的目的和用途是什么? 哪些事情会让我认为我必须使用共享服务而不是 Event Aggregator? 最佳答案 从事件订阅者的角度来看 EventAggregator,它有利于获
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 3年前关闭。 Improve this qu
寻找一个简单的 helloWorld EventAggregator 示例。我试图理解这一点,并且在遵循 RI 示例时遇到了一些困难。 谢谢 N 最佳答案 Prism 4.0 包括 EventAggr
我只是想知道区域的意义是什么。我想我不明白他们解决的问题。 例如,我看到很多人使用区域作为导航区域,但是为什么不将 ItemsControl 绑定(bind)到 ObservableCollectio
最近想将我的 WPF Prism 应用程序迁移到 7.1,这样做时我遇到了有关 Unity.Abstractions 的丢失引用错误。 将 Prism nuget 软件包升级到 Prism7.1,如下
在我的根 View 模型中,我称之为 await _navigationService.NavigateAsync( "/NavigationPage/Page1of2", useMo
在 2.1.x 时间框架中讨论了与 Prism 的集成,我们是 @2.4.x,Prism 4 现已推出,/contrib 中的 RIStockTrader 示例只是一个默认的 XAML 项目。 它应该
我正在使用 Prism4,并且在我的一个模块中,我试图用一个区域注册一个 View ,并处理它的按钮单击事件(当用户单击 View 上的按钮时发布)。 public class MyModule :
几个月来,我一直在将 Prism 2.0 用于个人项目。我最近听说过 Caliburn,我想知道是否有令人信服的理由让我考虑这样做。 我喜欢 Prism 的动态模块加载能力。我打算为我的应用程序构建模
我正在尝试对我的 Windows 应用商店应用程序中的暂停事件使用react。我添加了适当的回调方法,但遇到了问题: App.Current.Suspending += Current_Suspend
我目前正在尝试完成 this tutorial让 Prism 与 Spring.net 一起工作。 通过 NuGet(或手动引用程序集)引用 Prism4 和 Spring.Net 后,设置 Boot
几个月来,我一直在使用带有以下 XAML 命名空间声明的 Prism 6: xmlns:prism="http://www.codeplex.com/prism" 但我注意到这个命名空间 URL(重定
我在 PRISM 中实现应用程序,它需要从 dll 文件中动态导入模块。我设法做到了 - 他们正在导入,但我无法显示它。我决定创建一个特殊的模块来封装它——让我们称之为 ModuleDock。所以我们
我要创建的是一个 Silverlight 应用程序,其中包含几个选项卡/模块,这些选项卡/模块都是单独的 DLL。 我看到 PRISM 具有似乎针对 UI 的 Shell/Module 概念,并且我找
请帮忙 - 我迷路了! 我正在编写一个具有一些控件和一些屏幕的小型桌面应用程序。这应该稍后与一个小型网站集成,也有一些屏幕。这个想法是让用户编辑视频并选择图像,然后与她的 friend 分享他们的结果
我在使用方法时遇到问题 this.regionManager.RegisterViewWithRegion("TextRegion", typeof(TextView)); 如果我以某种方法在 Boo
我是一名优秀的程序员,十分优秀!