Заранее извиняюсь ... Я новичок в 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 в конструктор и позволить ему управлять активным соединением?