在我的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的方法,因为这看起来更简洁。
RequestInfo
是在什么时候创建的?它是由 HTTP 请求触发创建的吗? - weichch