using System.IO.Ports; namespace Toolkit.Foundation; public class SerialFactory(IServiceFactory factory) : ISerialFactory { private readonly Dictionary cache = []; public ISerialContext Create(ISerialConfiguration configuration) where TSerialReader : SerialReader { if (cache.TryGetValue(configuration, out ISerialContext? context)) { return (ISerialContext)context; } SerialPort serialPort = new(configuration.PortName, configuration.BaudRate) { DtrEnable = true }; SerialConnection connection = new(serialPort); SerialStreamer streamer = new(serialPort); context = factory.Create>(connection, streamer); cache.Add(configuration, context); return (ISerialContext)context; } }