[英]Dependency injection for SerialPort class
我想刪除對SerialPort
類的依賴項並改用依賴項注入。 但我不知道該使用哪個接口。 SerialPort
實現了ICommand
,但是如果我使用這個接口,我就不能使用SerialPort
方法。
這是我的代碼:
private readonly SerialPort _serialPort;
public CommandService(string comPort)
{
_serialPort = new SerialPort(comPort, 9600, Parity.None, 8, StopBits.One) { Handshake = Handshake.None };
try
{
_serialPort.Open();
}
catch (System.IO.FileNotFoundException)
{
throw new Exception($"Serialport { comPort } can't be found");
}
_serialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceived);
}
public void Dispose()
{
_serialPort.Close();
}
不幸的是, SerialPort
沒有接口。 如果你想在依賴注入中使用它,你必須創建自己的接口和一個實現它的類。 這個類只是 .NET 的SerialPort
類的包裝器:
public class SerialPortWrapper : ISerialPortWrapper
{
private readonly SerialPort port;
public SerialPortWrapper(SerialPort port)
{
this.port = port;
}
public void Open()
{
port.Open();
}
public string ReadLine()
{
return port.ReadLine();
}
public void WriteLine(string line)
{
port.WriteLine();
}
}
public interface ISerialPortWrapper
{
void Open();
string ReadLine();
WriteLine(string line);
}
在您的 CommandService 類中使用此接口:
private readonly ISerialPortWrapper _serialPort;
public CommandService(string comPort)
: this(new SerialPortWrapper(new SerialPort(comPort, 9600, Parity.None, 8, StopBits.One) { Handshake = Handshake.None }))
{
}
public CommandService(ISerialPortWrapper serialPortWrapper)
{
_serialPort = serialPortWrapper;
try
{
_serialPort.Open();
}
catch (System.IO.FileNotFoundException)
{
throw new Exception($"Serialport { comPort } can't be found");
}
}
為簡潔起見,我縮短了所有內容,但我希望您能理解。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.