using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using System.Collections.ObjectModel; namespace Toolkit.Foundation; public class MicrocontrollerBuilderConfiguration(IConfiguration configuration) : IMicrocontrollerBuilderConfiguration where TConfiguration : IMicrocontrollerConfiguration, new() where TSerialReader : SerialReader where TReadDeserializer : IMicrocontrollerModuleDeserializer, new() { private readonly List modules = new(); 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; } }