using System.IO.Ports; using TheXamlGuy.Framework.Core; namespace TheXamlGuy.Framework.Serial; public class SerialFactory : ISerialFactory { private readonly IServiceFactory factory; private readonly Dictionary cache = new(); public SerialFactory(IServiceFactory factory) { this.factory = factory; } 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; } }