using Microcontroller; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using System.Collections.ObjectModel; using TheXamlGuy.Framework.Serial; namespace TheXamlGuy.Framework.Microcontroller; public class MicrocontrollerBuilderConfiguration : IMicrocontrollerBuilderConfiguration where TConfiguration : IMicrocontrollerConfiguration, new() where TSerialReader : SerialReader where TReadDeserializer : IMicrocontrollerModuleDeserializer, new() { public MicrocontrollerBuilderConfiguration(IConfiguration configuration) { this.configuration = configuration; } private readonly List modules = new(); private readonly IConfiguration configuration; public Func Factory => (IServiceProvider provider) => provider.GetService()!.Create(configuration.Get(), Modules); public IReadOnlyCollection Modules => new ReadOnlyCollection(modules); public IMicrocontrollerBuilderConfiguration AddModule() where TModule : IMicrocontrollerModule, new() { modules.Add(new MicrocontrollerModuleDescriptor()); return this; } }