using Microsoft.Extensions.DependencyInjection; namespace Toolkit.Foundation; public class Component : IComponent { private readonly IComponentBuilder builder; protected Component(IComponentBuilder builder) => this.builder = builder; public static TComponent Create(IServiceProvider provider, Action builderDelegate) where TComponent : class, IComponent { IServiceFactory factory = provider.GetRequiredService(); IComponentBuilder builder = ComponentBuilder.Create(); builderDelegate(builder); return factory.Create(builder); } public IComponentBuilder Configure(string name, Action? builderDelegate = null) { if (builderDelegate is not null) { builderDelegate(builder); } return Configuring(builder); } public IComponentBuilder Configure(Action? builderDelegate = null) { if (builderDelegate is not null) { builderDelegate(builder); } return Configuring(builder); } public IComponentBuilder Configure(string name, TConfiguration? configuration = null, Action? builderDelegate = null) where TConfiguration : class, new() { if (builderDelegate is not null) { builderDelegate(builder); } builder.AddConfiguration(name, configuration); return Configuring(builder); } public virtual IComponentBuilder Configuring(IComponentBuilder builder) => builder; }