Files
Hyperbar/Hyperbar/Lifecycles/ServiceScopeFactory.cs
T
2024-01-14 20:35:38 +00:00

26 lines
811 B
C#

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