关于c#:在Prism MVVM应用程序中使用串行端口类库

Using Serial Port Class Library in Prism MVVM Application

我继承了WPF / Prism / Unity MVVM应用程序,需要链接到通过串行端口进行外部通信的类库中。串行端口库发布事件以获取错误和消息。

我是Prism的新手,但几年前我已经使用Unity。 Prism应用程序(简称为PrismApp)是基本的PrismApplication,具有两个模块:main和settings。我的串行端口库(我们称其为LibSerial)包装了基本的通信协议并发布了三个事件:ConnectionEventReceived,ErrorEvent和MessageReceived。 LibSerial具有Connect,StartSession和Send的功能。

我的问题是:

  • 我在哪里实例化我的LibSerial?我要为其创建模型还是可以在基本PrismApplication中实例化LibSerial?
  • 如何将事件发布到ViewModels?我假设我会在某个地方使用LibSerial事件,并使用EventAggregator将各种EventArgs推入视图模型中?
  • 我如何在PrismApp中调用我的LibSerial启动/启动会话/发送功能?在调用pubsub.publish的ViewModel中,它是DeleagateCommand吗?

谢谢大家!


Where do I instantiate my LibSerial?

将其注册到您的引导程序中,然后让容器实例化它。覆盖App.xaml.csPrismApplication类的RegisterTypes方法,并注册LibSerial类型:

1
2
3
4
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
    containerRegistry.RegisterSingleton<ILibSerial, LibSerial>();
}

然后可以使用ILibSerial(在本例中是LibSerial类实现的接口)注入视图模型,并像往常一样连接其事件并访问其成员:

1
2
3
4
5
6
7
public class ViewModel
{
    public ViewModel(ILibSerial libSerial)
    {
        libSeriel.MessageReceived += ...;
    }
}

容器将负责实例化,并且前提是您在引导程序中使用RegisterSingleton方法注册类型,那么将仅创建一个实例并在所有视图模型之间共享。