Added Scoped Handlers

This commit is contained in:
Dan Clark
2024-12-04 22:35:58 +00:00
parent 9b9330c8cc
commit 6454e1bb6f
12 changed files with 235 additions and 56 deletions
+11 -6
View File
@@ -2,20 +2,25 @@
namespace Toolkit.Foundation;
public class ServiceScopeFactory<TService>(IServiceScopeFactory serviceScopeFactory,
ICache<TService, IServiceScope> cache) :
IServiceScopeFactory<TService>
where TService : notnull
public class ServiceScopeFactory<TServiceScope>(IServiceScopeFactory serviceScopeFactory,
ICache<TServiceScope, IServiceScope> cache) :
IServiceScopeFactory<TServiceScope>
where TServiceScope : notnull
{
public (IServiceScope, TService) Create(params object?[] parameters)
public (IServiceScope, TServiceScope) Create(params object?[] parameters)
{
if (serviceScopeFactory.CreateScope() is IServiceScope serviceScope)
{
if (serviceScope.ServiceProvider.GetService<IServiceFactory>() is IServiceFactory factory)
{
if (factory.Create<TService>(parameters) is TService service)
if (factory.Create<TServiceScope>(parameters) is TServiceScope service)
{
cache.Add(service, serviceScope);
foreach (IInitializationScoped initializationScoped in serviceScope.ServiceProvider.GetServices<IInitializationScoped>())
{
initializationScoped.Initialize();
}
return (serviceScope, service);
}
}