В моем приложении asp. net core 3.1 у меня есть класс RequestInfo, который содержит информацию о текущем запросе, и я хотел бы сделать экземпляр RequestInfo доступным для промежуточного программного обеспечения и контроллеров путем внедрения зависимостей. Очевидно, что RequestInfo должен быть создан для каждого запроса, и для его создания необходим HttpContext. Я регистрирую временную службу следующим образом:
services.AddTransient<RequestInfo>(sp =>
{
var context = sp.GetService<HttpContext>();
return new RequestInfo(context)
});
Проблема в том, что когда вызывается моя фабрика, в поставщике услуг нет HttpContext.
Я пытался addScoped
и я также попытался поставить services.AddHttpContextAccessor();
в верхней части моего ConfigureServices и затем вызвать sp.GetService<HttpContextAccessor>().HttpContext
на заводе, но ни один из них не сработал.
Так что я спрашиваю, есть ли способ указать, что моя фабрика сервисов не вызывается до тех пор, пока провайдер услуг уже не внедрил HttpContext.
Я понимаю, что есть другие подходы: я мог бы внедрить RequestInfoFactory, а затем вызвать для этого потребительский вызов GetRequestInfo или что я мог бы использовать промежуточное программное обеспечение для создания RequestInfo и добавить его в context.Items. Я просто хочу выяснить, есть ли способ внедрить RequestInfo напрямую, потому что это кажется мне чище.