using Microsoft.Extensions.DependencyInjection; using Toolkit.Foundation; namespace Bitvault; public class VaultComponentsInitializer(IServiceProvider provider, IProxyServiceCollection proxy, IEnumerable> configurations, IVaultHostCollection vaults) : IInitializer { public Task Initialize() { foreach (IConfiguration configuration in configurations) { if (provider.GetRequiredService() is IVaultComponent component) { IComponentBuilder builder = component.Create(); builder.AddServices(services => { services.AddTransient(_ => provider.GetRequiredService>()); services.AddTransient(_ => provider.GetRequiredService>()); services.AddScoped(_ => provider.GetRequiredService()); services.AddScoped(_ => provider.GetRequiredService()); services.AddScoped(_ => provider.GetRequiredService()); services.AddTransient(_ => provider.GetRequiredService()); services.AddRange(proxy.Services); }); builder.AddConfiguration(configuration.Section, configuration.Value); IComponentHost host = builder.Build(); host.StartAsync(); vaults.Add(host); } } return Task.CompletedTask; } }