访问WPF Prism 4模块中的用户应用程序设置

访问WPF Prism 4模块中的用户应用程序设置,wpf,configuration,prism,Wpf,Configuration,Prism,我已经开发了一个Microsoft Prism 4.0应用程序,我正在努力理解如何使用户应用程序设置功能可用于模块 e、 g.a Properties.Settings.Default.MyProperty 我可以定义一个简单的类,该类通过引导加载程序填充(它确实具有属性句柄)并将其注入到模块中,但如果我想保存属性更改,我需要相信我需要属性的句柄。设置上下文对我的模块(简单类库)不可用.您的场景听起来像是使用“服务”类的完美理由。创建一个名为IUserSettingsService和UserSe

我已经开发了一个Microsoft Prism 4.0应用程序,我正在努力理解如何使用户应用程序设置功能可用于模块

e、 g.a Properties.Settings.Default.MyProperty


我可以定义一个简单的类,该类通过引导加载程序填充(它确实具有属性句柄)并将其注入到模块中,但如果我想保存属性更改,我需要相信我需要属性的句柄。设置上下文对我的模块(简单类库)不可用.

您的场景听起来像是使用“服务”类的完美理由。创建一个名为IUserSettingsService和UserSettingsService的接口和类,该接口和类包含信息(或者可以从存储信息的位置加载和保存信息)

阅读Prism 4.0帮助文件的第3章,管理组件之间的依赖关系,向注册类型(Unity或MEF,取决于您使用的DI容器)

然后,在需要用户设置的ViewModel中,找到并使用您的服务。在MEF中,只需添加具有[Import]属性的IUserSettingsService类型的属性,或使用[ImportingConstructor]并具有IUserSettingsService类型的参数即可。使用Unity,您可以通过容器访问服务。请参阅Prism帮助文件的第10章-高级MVVM场景

在评论讨论后添加:
因为您需要将服务放在主应用程序的上下文中,所以可以在那里实现服务类。在共享库中为您的服务创建接口,主项目和模块都可以使用该接口。最后,在bootloader类中而不是在模块中加载服务。

Bahri。谢谢你的回答。你的回答不是我所需要的。我已经有了一个服务,可以复制属性。我需要的设置,并通过IModule.Initialize(我创建了一个新的构造函数来执行此操作)注入到我的模块中。问题更多的是获取Properties.Settings上下文的句柄,该上下文仅对主应用程序项目可用。在这个项目中创建一个包装器服务,然后让我需要的模块引用主应用程序项目,这似乎不是很干净。事实上,我怀疑我做不到这一点,因为这会创建一个循环引用。@Jemmitch我想我看到了你的困境。您的服务实现需要位于主应用程序项目中,才能访问属性.设置,但您的接口应该在主应用程序项目以及模块引用的程序集中定义。这样就可以注入服务,而不需要任何循环依赖项。我说得对吗?你已经抓住了这个问题。实现需要位于主应用程序中。正如您所说,接口可能位于共享程序集中,但在某一点上,模块在为模块配置DI时需要了解具体的实现。将接口放在另一个库中(我使用称为Framework的程序集)如何,将服务类放在主应用程序项目中,以及在shell中向DI注册服务?我还遗漏了什么吗?到目前为止,我为基于Unity的DI注册依赖项的经验表明,这一切都发生在模块中(我的viewmodels将使用此服务)。我没有看到任何示例,其中与shell分离的项目中的模块使用shell中的DI。