c# - 在 Prism MVVM 应用程序中使用串行端口类库
问题描述
我继承了一个 WPF/Prism/Unity MVVM 应用程序,我需要链接到一个通过串行端口与外部通信的类库。串行端口库发布错误和消息的事件。
我是 Prism 的新手,但几年前我使用过 Unity。Prism 应用程序(我们称之为 PrismApp)是一个基本的 PrismApplication,有两个模块:main 和 settings。我的串行端口库(我们称之为 LibSerial)封装了基本通信协议并发布了三个事件:ConnectionEventReceived、ErrorEvent 和 MessageReceived。LibSerial 具有 Connect、StartSession 和 Send 的功能。
我的问题是:
- 我在哪里实例化我的 LibSerial?我是为它创建一个模型还是可以在我的基础 PrismApplication 中实例化 LibSerial?
- 如何将事件发布到我的 ViewModel?我假设我会在某处使用 LibSerial 事件并使用 EventAggregator 将各种 EventArgs 推送到视图模型中?
- 我将如何从 PrismApp 中调用我的 LibSerial start/startsession/send 函数?那会是调用 pubsub.publish 的 ViewModel 中的 DeleagateCommand 吗?
感谢大家!
解决方案
我在哪里实例化我的 LibSerial?
在您的引导程序中注册它并让容器实例化它。覆盖你的类的RegisterTypes
方法并注册类型:PrismApplication
App.xaml.cs
LibSerial
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry.RegisterSingleton<ILibSerial, LibSerial>();
}
ILibSerial
然后,您可以使用一个(在本例中是该类实现的接口)注入您的视图模型,LibSerial
并像往常一样连接其事件并访问其成员:
public class ViewModel
{
public ViewModel(ILibSerial libSerial)
{
libSeriel.MessageReceived += ...;
}
}
容器将负责实例化,并且如果您使用RegisterSingleton
引导程序中的方法注册类型,则只会创建一个实例并在所有视图模型之间共享。
推荐阅读
- powershell - 签署脚本 - 在部署期间提交源代码控制或签名?
- linux - 如何设置半小时和 45 分钟的时区而不用担心 Linux 中 DST 的变化?
- pandas - 使用多索引更新单列时创建重复行
- php - PHP 文件中的 $_POST 数组显示空结果
- node.js - apollo-server-express CORS 问题
- grails - Grails sessionFactory 等效于 Domain.withNewSession 和 withTransaction
- java - Azure 连接无法连接证书错误
- jquery - 如何在没有 JS 的情况下使 instagram iframe 具有响应性?
- python - 从 Flask 生成(内联 CSS)HTML 模板不起作用
- terminal - 无法在终端中运行 utop