如何使用DI在类构造函数中获取Microsoft.AspNet.Http.HttpContext实例

布鲁斯·查普曼

我正在MVC 6中构建一个一次性应用程序,并尝试使用不同的体系结构进行依赖。

我面临的问题是如何创建MyAppContext特定于应用程序的自定义' '对象。这将需要来自HttpContext和数据库的一些信息,并且将成为针对应用程序特定属性的请求范围的存储库。我想将的实例传递HttpContext到“ MyAppContext的构造函数中

我已经使用DI成功地创建了DataService带有IDataService接口的' '对象,并且可以正常工作。与“ MyAppContext”类的不同之处在于,它在构造函数中具有两个参数-“ DataService”和“ Microsoft.AspNet.Http.HttpContext。”。这是MyAppContext类:

public class MyAppContext : IMyAppContext
{
    public MyAppContext(IDataService dataService, HttpContext httpContext)
    {
       //do stuff here with the httpContext
    }
}

在启动代码中,我注册了DataService实例和MyAppContext实例:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();
        //adds a singleton instance of the DataService using DI
        services.AddSingleton<IDataService, DataService>();
        services.AddScoped<IMyAppContext, MyAppContext>();    

    }

    public void Configure(IApplicationBuilder app)
    {
        app.UseErrorPage();
        app.UseRequestServices();
        app.UseMvc(routes => /* routes stuff */);
    }

我期望HttpContextDI中解析构造函数中参数。运行代码时,这是我得到的异常:

InvalidOperationException:尝试激活“ MyAppContext”时无法解析类型为“ Microsoft.AspNet.Http.HttpContext”的服务

我认为这是因为没有HttpContext发生该错误的特定实例,但是我不知道如何HttpContext在DI中注册该实例。我添加了行“ app.UseRequestServices();”,但这没有任何区别。我还尝试了以下方法的变体:

services.AddScoped<HttpContext, HttpContext>();

但这失败了,因为第二个HttpContext应该是一个实例-我知道这是不正确的,但是还无法弄清楚是什么。

因此,总而言之-如何将HttpContext对象传递到MyAppContext的构造函数中?

维克多·赫尔杜加奇

注入IHttpContextAccessor构造函数

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

AspNet Core 2类型'Microsoft.AspNetCore.Http.HttpContext'会话没有服务问题

Microsoft.AspNet.Http.HttpContext中的ApplicationServices和RequestServices有什么区别?

IApplicationBuilder同时存在于Microsoft.AspNet.Http.Abstractions和Microsoft.AspNet.Http中

从Microsoft.AspNet.Http.HttpRequest获取原始URL

如何不使用构造函数DI创建Http实例?(RC.5 +)

Microsoft.Net.Http与Microsoft.AspNet.WebApi.Client

如何在AspNet 5中获取HttpContext.Current.User.Identity.Name?

AspNet Core中UTC中的Http查询参数

如何从IServiceProvider.GetServices <T>(aspnet核心DI)按基本类型获取实例?

类实例未保存到HttpContext

如何正确实例化HttpContext对象?

在构造函数中访问HttpContext以获取假DI

Microsoft.AspNet.WebApi.Cors:请求的资源不支持http方法“ OPTIONS”

'Microsoft.AspNet.Http'没有一个强名称

安装NuGet软件包'Microsoft.AspNet.Http.Extensions 1.0.0-beta3'时出错

在AspNET Core中使用DI

中间件中的HttpContext .NET核心保存实例

aspnet中的谷歌图表

在依赖注入实例化类之前是否触发了 Aspnet 核心身份验证?

如何从类实例获取JavaScript类构造函数参数

无法解析角度5 aspnet预渲染中的node_modules \ @angular \ platform-server \ bundles中的@ angular / http

如何指定我希望控制器的构造函数接收的类实例(使用Web API,DI和Castle Windsor时)?

如何使用类构造函数为类实例定义接口

构造函数获取内部通用类的实例作为其参数。如何使用它?

在aspnet vNext中使用旧的aspnet成员资格

如何过滤aspnet核心日志?

AspNet Core中的实时编码

在 ASPNET Webform 中使用 PWA

将ILogger或ILoggerFactory传递给AspNet Core中的构造函数?