在Prism MVVM应用程序中使用串行端口类库

时间:2019-01-03 17:31:24

标签: c# wpf serial-port unity-container prism

我继承了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吗?

谢谢大家!

1 个答案:

答案 0 :(得分:1)

  

我在哪里实例化我的LibSerial?

将其注册到您的引导程序中,然后让容器实例化它。覆盖RegisterTypesPrismApplication类的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方法注册类型,该容器将仅创建一个实例并在所有视图模型之间共享。