Использование библиотеки классов последовательного порта в приложении Prism MVVM - PullRequest
0 голосов
/ 03 января 2019

Я унаследовал приложение WPF / Prism / Unity MVVM, и мне нужно подключиться к библиотеке классов, которая обменивается данными через последовательный порт. Библиотека последовательного порта публикует События для ошибок и сообщений.

Я новичок в Prism, но несколько лет назад я использовал Unity. Приложение Prism (назовем его PrismApp) представляет собой базовое приложение PrismApplication с двумя модулями: основным и настройками. Моя библиотека последовательных портов (назовем ее LibSerial) оборачивает базовый протокол связи и публикует три события: ConnectionEventReceived, ErrorEvent и MessageReceived. LibSerial имеет функции для Connect, StartSession и Send.

Мои вопросы:

  • Где мне создать экземпляр моей LibSerial? Я создаю модель для него или могу создать экземпляр LibSerial в моем базовом приложении PrismApplication?
  • Как мне публиковать события в моих моделях ViewModels? Я предполагаю, что я бы где-нибудь использовал LibSerial Events и использовал бы и EventAggregator, чтобы выдвинуть различные EventArgs в модели представления?
  • Как мне вызвать функции запуска / запуска / отправки LibSerial из PrismApp? Будет ли это DeleagateCommand в ViewModel, которая вызывает pubsub.publish?

Спасибо всем!

1 Ответ

0 голосов
/ 04 января 2019

Где я могу создать свою LibSerial?

Зарегистрируйте его в своем загрузчике и позвольте контейнеру создать его экземпляр.Переопределите метод RegisterTypes класса PrismApplication в вашем App.xaml.cs и зарегистрируйте тип LibSerial:

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

Затем вы можете внедрить модели представления с помощью ILibSerial (что в этомcase - это интерфейс, который реализует класс LibSerial) и подключает его события и обращается к его членам как обычно:

public class ViewModel
{
    public ViewModel(ILibSerial libSerial)
    {
        libSeriel.MessageReceived += ...;
    }
}

Контейнер позаботится о создании экземпляра и при условии, что вы зарегистрируете тип с помощьюRegisterSingleton метод в загрузчике, будет создан только один экземпляр, который будет использоваться всеми моделями представления.

...