using Microsoft.Extensions.DependencyInjection; namespace Toolkit.Foundation; public class ServiceScopeFactory(IServiceScopeFactory serviceScopeFactory, ICache cache) : IServiceScopeFactory where TServiceScope : notnull { public (IServiceScope, TServiceScope) Create(params object?[] parameters) { if (serviceScopeFactory.CreateScope() is IServiceScope serviceScope) { if (serviceScope.ServiceProvider.GetService() is IServiceFactory factory) { if (factory.Create(parameters) is TServiceScope service) { cache.Add(service, serviceScope); foreach (IInitializationScoped initializationScoped in serviceScope.ServiceProvider.GetServices()) { initializationScoped.Initialize(); } return (serviceScope, service); } } } return default; } }