using Microsoft.Extensions.DependencyInjection; namespace Toolkit.Foundation; public class ScopeServiceFactory(IServiceScopeFactory serviceScopeFactory, ICache cache) : IScopeServiceFactory where TService : notnull { public (IServiceScope, TService)? Create(params object?[] parameters) { if (serviceScopeFactory.CreateScope() is IServiceScope serviceScope) { if (serviceScope.ServiceProvider.GetService() is IServiceFactory factory) { if (factory.Create(parameters) is TService service) { cache.Add(service, serviceScope); return (serviceScope, service); } } } return default; } }