Правильно ли получить ограниченную службу из синглтона с помощью IHttpContextAccessor? - PullRequest
0 голосов
/ 12 сентября 2018

Каковы возможные последствия или побочные эффекты от внедрения и использования этого «поставщика услуг в области запроса»?

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();
    }
}
...