Использование HttpContextAccessor внутри внедренного класса - PullRequest
1 голос
/ 29 мая 2019

Используя ASP.NET Core 3.0 Preview 5, я пытаюсь получить доступ к HttpContextAccessor из класса AppState, который внедряю в свое приложение.

К сожалению, я продолжаю получать System.AggregateException с сообщением

'' Некоторые службы не могут быть построены (Ошибка при проверке дескриптора службы 'ServiceType: [MyNameSpace] .AppState Время жизни: тип реализации Singleton: [MyNameSpace] .AppState ': Не удалось разрешить службу для типа «Microsoft.AspNetCore.Http.HttpContextAccessor» при попытке активировать '[MyNameSpace] .AppState'.) '

Мой Файл Startup.cs выглядит следующим образом:

public void ConfigureServices(IServiceCollection services)
{
    services.AddRazorPages();
    services.AddServerSideBlazor();

    services.AddHttpContextAccessor();
    services.AddSingleton<AppState>();

    // More services
}

и мой файл AppState.cs выглядит следующим образом:

private HttpContextAccessor _httpContextAccessor;

public AppState(HttpContextAccessor httpContextAccessor)
{
     _httpContextAccessor = httpContextAccessor;
}

Я проверил онлайн, и кажется, что простое добавление AddHttpContextAccessor и AddSingleton<T> к моему ConfigureServices методу должно сработать, но по какой-то причине он не работает.

Поскольку я довольно новичок в ASP.NET Core и Dependency Injection, я просто хотел посмотреть, есть ли кто-то, кто знает, что он делает, знает, что я делаю неправильно!

1 Ответ

1 голос
/ 29 мая 2019

Метод AddHttpContextAccessor() регистрирует службу как IHttpContextAccessor (обратите внимание на префикс I, обозначающий его как интерфейс), и это то, что ваш класс должен явно принять в своем конструкторе:

private IHttpContextAccessor _httpContextAccessor;

public AppState(IHttpContextAccessor httpContextAccessor)
{
     _httpContextAccessor = httpContextAccessor;
}

Однако вы не должны использовать это из одноэлементного класса. HTTP-запросы, что неудивительно, отличаются для каждого запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...