namespace Toolkit.Foundation; public class MicrocontrollerFactory(IServiceFactory factory, ISerialFactory serialFactory) : IMicrocontrollerFactory { private readonly Dictionary cache = new(); public IMicrocontrollerContext Create(IMicrocontrollerConfiguration configuration, IReadOnlyCollection modules) where TSerialReader : SerialReader where TReadDeserializer : IMicrocontrollerModuleDeserializer, new() { if (cache.TryGetValue(configuration, out IMicrocontrollerContext? context)) { return (IMicrocontrollerContext)context; } ISerialContext serialContext = serialFactory.Create(configuration); context = factory.Create>(modules, serialContext); cache.Add(configuration, context); return (IMicrocontrollerContext)context; } }