平台需支援多廠牌 IC 卡讀卡機、門禁控制器,發送統一指令 (讀卡、開門),各廠商依平台通訊協定改造或開發適配器。
public interface ICardReader {
string ReadCard(); // 回傳卡號
void Initialize(IDictionary config); // 參數設定
}
public interface IDoorController {
bool OpenDoor();
void Initialize(IDictionary config);
}
// VendorA_CardReader.dll
public class VendorACardReader : ICardReader {
public void Initialize(IDictionary config) { /* 串口/TCP 設定 */ }
public string ReadCard() { /* 發送廠商指令、解析回傳 */ return "CARD123"; }
}
// VendorB_DoorController.dll
public class VendorBDoorController : IDoorController { ... }
// appsettings.json
{
"Hardware": {
"CardReader": {
"Type": "VendorA.CardReader.VendorACardReader, VendorA_CardReader",
"Config": { "Port": "COM3", "BaudRate": "9600" }
},
"DoorController": {
"Type": "VendorB.Door.VendorBDoorController, VendorB_Door",
"Config": { "IP": "192.168.1.100", "Port": "5000" }
}
}
}
public static class HardwareFactory {
public static T Create(string typeName, IDictionary config) where T : class {
Type type = Type.GetType(typeName, throwOnError: true);
T instance = (T)Activator.CreateInstance(type);
if (instance is IInitializable init) init.Initialize(config);
return instance;
}
}
// 使用
var reader = HardwareFactory.Create(cfg["Hardware:CardReader:Type"], cfg["Hardware:CardReader:Config"]);
var cardNo = reader.ReadCard();
若廠商無法修改韌體,平台側開發 **適配器 (Adapter)** 將統一指令轉換為廠商私有協定 (TCP/Serial/USB HID),同上架構處理。
FileSystemWatcher 監控 DLL 目錄,動態載入/卸載。MEF (Managed Extensibility Framework) 或 Autofac 等 DI 容器管理生命週期。介面導向設計 + 反射載入,是解決多廠牌硬體整合的經典最佳實踐。