using Microsoft.Extensions.DependencyInjection; namespace Toolkit.Foundation; public class MicroControllerContextFactory(IServiceProvider provider, IServiceFactory factory, ISerialFactory serialFactory) : IMicroControllerContextFactory { private readonly Dictionary cache = []; public IMicroControllerContext? Create(IReadOnlyCollection modules) where TConfiguration : ISerialConfiguration where TReader : SerialReader where THandler : ISerialEventArgs { if (provider.GetRequiredService() is TConfiguration configuration) { if (cache.TryGetValue(configuration, out IMicroControllerContext? context)) { return (IMicroControllerContext)context; } if (serialFactory.Create() is ISerialContext serialContext) { context = factory.Create>(modules, serialContext); cache.Add(configuration, context); return (IMicroControllerContext)context; } } return default; } }