Каковы возможные последствия или побочные эффекты от внедрения и использования этого «поставщика услуг в области запроса»?
public interface IScopedServiceProvider : IServiceProvider
{
}
public class ScopedServiceProvider : IScopedServiceProvider
{
private readonly IHttpContextAccessor _httpContextAccessor;
public ScopedServiceProvider(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
public object GetService(Type serviceType)
{
return _httpContextAccessor.HttpContext.RequestServices.GetService(serviceType);
}
}
Цель в основном заключается в том, чтобы получить доступ к услуге с определенными областями из данного одноэлементного сервиса :
Зарегистрирован в контейнере так:
services.AddHttpContextAccessor();
services.AddScoped<IScopedServiceProvider, ScopedServiceProvider>();
services.AddScoped<IMyScopedService, MyScopedService>();
services.AddSingleton<IMySingletonService, MySingletonService>();
Используется так:
public class MySingletonService : IMySingletonService
{
private readonly IScopedServiceProvider _scopedServiceProvider;
public MySingletonService(IScopedServiceProvider scopedServiceProvider)
{
_scopedServiceProvider = scopedServiceProvider;
}
public void DoWork()
{
var scopedService = _scopedServiceProvider.GetService<IMyScopedService>();
scopedService.DoAnotherWork();
}
}