有些服务(例如HttpContext)只能由ASP.NET Core运行时构建,因此不能直接通过依赖注入的方式在类的构造函数中获取它们的实例。为了解决这个问题,可以使用IServiceProvider从容器中获取这些服务的实例,如下所示:
public class MyController : Controller
{
private readonly IHttpContextAccessor _httpContextAccessor;
public MyController(IServiceProvider serviceProvider)
{
_httpContextAccessor = serviceProvider.GetRequiredService();
}
// ...
}
在上面的代码中,我们通过从IServiceProvider获取IHttpContextAccessor的实例来解决了该服务无法被构建的问题。