using TheXamlGuy.Framework.Core; using TheXamlGuy.Framework.Serial; namespace TheXamlGuy.Framework.Microcontroller; public class MicrocontrollerFactory : IMicrocontrollerFactory { private readonly IServiceFactory factory; private readonly ISerialFactory serialFactory; private readonly Dictionary cache = new(); public MicrocontrollerFactory(IServiceFactory factory, ISerialFactory serialFactory) { this.factory = factory; this.serialFactory = serialFactory; } 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; } }