如何将自定义服务添加到 wpf prism 项目中,所有视图模型都可以访问该项目?

How to add custom service to wpf prism project which will be accessible in all viewmodels?

我正在 Prism 框架中开发应用程序 WPF。 现在我需要两件事。 1. 显示各种自定义消息的自定义对话框和 2. 通过 Json 保存和更新并从系统中存储的文件中获取应用程序设置。

现在我创建了一个 class,它执行与 Jason 相关的工作,并且几乎没有 API,例如获取和设置对象以及将对象保存到 Json 和将 Json 保存到对象。现在我需要在 class 的所有 ViewModel 中执行此操作。 我不想在所有 ViewModel 中单独创建此 class 的实例。

所以,我正在寻找一些 prism 支持的服务,它们可以在这方面提供帮助。 我已经看到这个问题 (What exactly are "WPF services"?) 但它没有给我我想要的,或者我可能正在理解这个问题的答案。

如果有人在这方面给我提示,我将不胜感激

首先创建一个接口 IJsonService 并在 class JsonService 上实现它。

在接口 IJsonService 中添加这两个函数: 对象 DeSerializeJsonToObject(字符串文件名); void SerializeObjectToJson(object obj);

现在在App.xaml.cs中编写如下代码注册服务。

protected override void RegisterTypes(IContainerRegistry containerRegistry)
    {
        containerRegistry.RegisterSingleton<IJsonService, JsonService>();
    }

现在转到您需要此服务的任何视图模型。创建一个类似 JsonService 的字段。 修改 ViewModel 的构造函数,如下所示:

IEventAggregator eventAggregator;
IJsonService JsonService;

public SensorConfigViewModel(IEventAggregator _eventAggregator,
                                     IJsonService jsonService)
        {
            this.eventAggregator = _eventAggregator;
            this.JsonService = jsonService;
}

现在您可以访问接口 IJsonService 中声明的方法,这些方法在 JsonService.cs

中的函数中实现

只需键入 JsonService.DeSerializeJsonToObject(....) 即可访问服务方法。 我使用了最新的 Prism nuget 包。在旧的 Prism 包中可能存在一些差异。