Как: управлять синглетами подобного типа в Prism с помощью DI / IoC - PullRequest
0 голосов
/ 13 ноября 2018

Заранее извиняюсь ... Я новичок в DI / IoC, Prism, и это был долгий 12-часовой рабочий день!

Проект, над которым я работаю, должен поддерживать связь для TcpIp, Bluetooth LE и ( Serial, если доступно ). Каждый тип соединения будет реализовывать IConnection (см. Ниже) и интерфейс, специфичный для типа (то есть IBluetoothConnection, ITcpIpConnection и ISerialConnection ) для инкапсуляции соответствующих параметров соединения. (Скорость передачи, четность, управление потоком, IP-адрес, номер порта и т. Д.)

public interface IConnection
{
  bool Connected { get; }    
  bool Connect();
  bool Disconnect();
  bool Tx(string message);
  string Rx();
}

public interface IBluetoothLeConnection : IConnection
{
  int BaudRate { get; set; }
  int Parity { get; set; }
  int FlowControl { get; set; }
}

public interface ITcpIpConnection : IConnection
{
  string IP { get; set; }
  int Port { get; set; }
}

public interface ISerialConnection : IConnection
{
  string CommPort { get; set; }
  int BaudRate { get; set; }
  int Parity { get; set; }
  int FlowControl { get; set; }
}

Я планирую зарегистрировать все три как синглтоны.

containerRegistry.RegisterSingleton<IBluetoothConnection, BluetoothLeConnection>();
containerRegistry.RegisterSingleton<ITcpIpConnection, TcpIpConnection>();
containerRegistry.RegisterSingleton<ISeialConnection, SerialConnection>();

Определить Соединение IConnection в ViewMainBase , а затем указать его на выбранное конкретное соединение во время выполнения.

Вопросы

Будет ли это работать?

Есть ли лучший способ ( лучшая практика ) или (магия DI / IoC) для выполнения этого?

Должен ли я создать класс ConnectionManager , внедрить все три типа IConnection в конструктор и позволить ему управлять активным соединением?

1 Ответ

0 голосов
/ 13 ноября 2018

Будет ли это работать?

Да.

Есть ли лучший способ (лучшая практика) или (магия DI / IoC) для достижения этой цели?

Я бы реорганизовал параметр ref из Rx во что-то другое, потому что это нелегко, если вы пишете свои тесты с использованием такой инфраструктуры, как Moq.

Должен ли я создать класс ConnectionManager, внедрить все три типа IConnection в конструктор и позволить ему управлять активным соединением?

Да.

...