using Microsoft.Extensions.DependencyInjection; using System.IO.Ports; namespace Toolkit.Foundation; public class SerialFactory(IServiceProvider provider, IServiceFactory factory) : ISerialFactory { private readonly Dictionary cache = []; public ISerialContext? Create() where TConfiguration : ISerialConfiguration where TReader : SerialReader { if (provider.GetRequiredService() is TConfiguration configuration) { 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; } return default; } }