c# - SerialPort 类的依赖注入
问题描述
我想删除对SerialPort
类的依赖并改用依赖注入。但我不知道该使用哪个接口。SerialPort
implements 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
没有接口。如果您想将它与依赖注入一起使用,则必须创建自己的接口和实现它的类。这个类将只是 .NETSerialPort
类的包装器:
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");
}
}
为了简洁起见,我将所有内容都缩短了,但我希望你能明白。
推荐阅读
- c# - WPF - 当我将 TextDecorations.Underline 应用于运行时出现 FatalExecutionEngineError
- r - 如何将文件读取到 R 中的列表列表中?
- html - 如何在 CSS 中更改加载器的旋转方向并在加载器内添加文本?
- pega - Pega 调试工具
- c# - 我在一个班级中有一个列表,但我无法从另一个班级 C# 访问它
- python - 如何仅获取年份作为数据框索引
- python - 将分数分配给用户选择的随机变量,该用户通过 random.choice() 从列表中获得两个选项
- javascript - 将数据 json 字符串传递给数字 Vue.js
- makefile - Makefile - 如果条件
- javascript - 如何将文本复制到剪贴板 HTML?