如何在 ASP.NET MVC 4 中使用 Autofac 注入 HttpContextBase

2024-04-08

我在用ASP.MVC 4 and Autofac.

我已在我的中注册了以下内容global.asax.cs file:

ContainerBuilder builder = new ContainerBuilder();

builder.Register(c => c.Resolve<HttpContextBase>().Request)
     .As<HttpRequestBase>()
     .InstancePerHttpRequest();
builder.Register(c => c.Resolve<HttpContextBase>().Response)
     .As<HttpResponseBase>()
     .InstancePerHttpRequest();
builder.Register(c => c.Resolve<HttpContextBase>().Server)
     .As<HttpServerUtilityBase>()
     .InstancePerHttpRequest();
builder.Register(c => c.Resolve<HttpContextBase>().Session)
     .As<HttpSessionStateBase>()
     .InstancePerHttpRequest();

builder.RegisterControllers(Assembly.GetExecutingAssembly());

builder.RegisterType<WebWorkContext>().As<IWorkContext>().InstancePerHttpRequest();

在我的家庭控制器中,我有这个(仅用于测试目的):

private readonly HttpContextBase httpContext;

public HomeController(HttpContextBase httpContext)
{
     this.httpContext = httpContext;
}

我在 ASP.NET MVC 3 项目中使用了完全相同的代码,并且运行良好。现在在这个项目中我遇到了错误。不知道为什么?我收到的错误是:

无法使用可用的服务和参数调用类型“MyProject.Web.Controllers.HomeController”上的“Autofac.Core.Activators.Reflection.DefaultConstructorFinder”找到的任何构造函数:无法解析参数“System.Web.HttpContextBase httpContext”构造函数“Void .ctor(System.Web.HttpContextBase)”。在 Autofac.Core.Activators.Reflection.ReflectionActivator.ActivateInstance(IComponentContext 上下文,IEnumerable1 parameters) at Autofac.Core.Resolving.InstanceLookup.Activate(IEnumerable1 个参数)位于 Autofac.Core.Resolving.InstanceLookup.Execute() 处 Autofac.Core.Resolving.ResolveOperation.GetOrCreateInstance(ISharingLifetimeScope currentOperationScope, IComponentRegistration 注册, IEnumerable1 parameters) at Autofac.Core.Resolving.InstanceLookup.ResolveComponent(IComponentRegistration registration, IEnumerable1 个参数)位于 Autofac.Core.Registration.ExternalRegistrySource.

我不太确定为什么这行不通?我需要在 ASP.NET 4 中做不同的事情吗?

我有一个单独的项目,我也想在其中注入HttpContextBase我遇到了同样的错误。


谢谢nemesv.

我最终更换了:

builder.Register(c => c.Resolve<HttpContextBase>().Request)
     .As<HttpRequestBase>()
     .InstancePerHttpRequest();
builder.Register(c => c.Resolve<HttpContextBase>().Response)
     .As<HttpResponseBase>()
     .InstancePerHttpRequest();
builder.Register(c => c.Resolve<HttpContextBase>().Server)
     .As<HttpServerUtilityBase>()
     .InstancePerHttpRequest();
builder.Register(c => c.Resolve<HttpContextBase>().Session)
     .As<HttpSessionStateBase>()
     .InstancePerHttpRequest();

...只需:

builder.RegisterModule(new AutofacWebTypesModule());

现在可以了。不确定有什么区别,但模块中的代码看起来与上面的完全相同。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 ASP.NET MVC 4 中使用 Autofac 注入 HttpContextBase 的相关文章

  • 如何从当前 .NET 表单/应用程序发送密钥 F12

    我非常确定以下按钮激活的表单代码应该在我的 C 应用程序中引发 Control F12 SendKeys F12 但它似乎并没有继续进入 Windows shell 并激活另一个正在侦听它的程序 我的键盘可以用 看起来发送键在某处被拦截 并
  • 如何在 C# 事件中区分更改是由代码还是由用户进行?

    我有一个简单的TextBox一开始是空的 我有一个简单的事件 TextChanged 可以知道用户何时更改了其中的任何内容TextBox 但是 如果我自己在代码中对其执行任何操作 该事件就会触发 喜欢设置textbox Text Test
  • 处理 LINQ sum 表达式中的 null

    我正在使用 LINQ 查询来查找列的总和 并且在少数情况下该值有可能为空 我现在使用的查询是 int score dbContext domainmaps Where p gt p SchoolId schoolid Sum v gt v
  • 为什么C Clock()返回0

    我有这样的事情 clock t start end start clock something else end clock printf nClock cycles are d d n start end 我总是得到输出 时钟周期是 0
  • 我应该在单元测试中使用 AutoMapper 吗?

    我正在为 ASP NET MVC 控制器方法编写单元测试 这些控制器依赖于IMapper 我创建的用于抽象 AutoMapper 的接口 使用 Castle Windsor 通过构造函数注入传入 动作方法使用IMapper从领域对象映射到
  • Linq Where 本地计数器关闭在 VS watch 中的结果不同

    我尝试删除前 3 个元素array与 LinQWhere扩展功能 这是一个例子 var array new 1 2 3 4 5 6 7 8 9 var count 3 var deletedTest1 0 var test1 array W
  • 身份未映射异常

    System Security Principal IdentityNotMappedException 无法转换部分或全部身份引用 该错误仅在应用程序注册后出现一次 当 SecurityIdentifier 无法映射时 例如 返回 Ide
  • 使用 VSTO 更改 Outlook 设置

    我刚刚花了大约 4 个小时试图弄清楚如何以编程方式检索 设置 Microsoft Outlook 2010 的 Outlook 设置 我所说的 设置 是指文件 选项 邮件下的设置 我想做的是检索用户设置的设置列表 自动化我们每天需要在某些消
  • 根据拦截和返回值自动重试客户端WCF调用

    是否可以拦截 WCF 调用的结果并重试该操作 例如 操作的返回值可能包含状态代码 指示我传递到原始调用的会话令牌已过期 在这种情况下 我可以检索新的会话令牌并使用新的会话令牌重试调用 是否可以通过使用 WCF 拦截返回值 检查它 然后以对操
  • 防止复制构造和返回值引用的分配

    如果我有一个函数返回对类实例的引用 但我无法控制其源 比如说list
  • CMake - 将预构建库链接到 C# 项目

    我正在使用 CMake 构建 C 库 该库依赖于已构建的库 dll 我似乎无法让图书馆链接到我的图书馆 我尝试过使用target link libraries mylib external lib 我也尝试过暴力破解 reference e
  • C#:使用 System.Text 和 System.Text.RegularExpressions 之间的区别

    在 ASP NET C 应用程序中 我注意到为了使用 Regex 和 StringBuilder 我必须将两者都放在 using System Text using System Text RegularExpressions 从简单的角度
  • _mm_max_ss 在 clang 和 gcc 之间有不同的行为

    我正在尝试使用 clang 和 gcc 交叉编译一个项目 但在使用时发现一些奇怪的差异 mm max ss e g m128 a mm set ss std numeric limits
  • 使用 AutoMapper 进行 LINQ GroupBy 聚合

    试图让查询工作 但老实说不确定如何 或者是否可能 进行它 因为我尝试过的一切都不起作用 共查询6个表 Person PersonVote PersonCategory Category City FirstAdminDivision Per
  • 为什么 C 函数不能返回数组类型?

    我是 C 语言新手 想知道 为什么 C 函数不能返回数组类型 我知道数组名是数组第一个值的地址 而数组是 C 中的二等公民 您自己已经回答了这个问题 数组是二等公民 C 按值返回 数组不能按值传递 因此不能返回它们 至于为什么数组不能按值传
  • SSBO 是更大的 UBO?

    我目前正在 OpenGL 4 3 中使用 UBO 进行渲染 以将所有常量数据存储在 GPU 上 诸如材料描述 矩阵等内容 它可以工作 但是 UBO 的小尺寸 我的实现为 64kB 迫使我多次切换缓冲区 减慢渲染速度 我正在寻找类似的方法来存
  • 在 unix 中编译 dhrystone 时出错

    我是使用基准测试和 makefile 的新手 我已经从下面的链接下载了 Dhrystone 基准测试 我正在尝试编译它 但我遇到了奇怪的错误 我尝试解决它 但没有成功 有人可以帮助我运行 dhrystone 基准测试吗 以下是我尝试编译的两
  • 多个同名内存数据库

    关系到这个答案 https stackoverflow com a 48446491 596758 我试图通过设置让多个上下文工作UseInMemoryDatabase以同名 下面的测试失败 第二个上下文为空 我还需要做什么才能在内存数据库
  • 当我读取 500MB FileStream 时出现 OutOfMemoryException

    我使用 Filestream 读取大文件 gt 500 MB 但出现 OutOfMemoryException 任何有关它的解决方案 我的代码是 using var fs3 new FileStream filePath2 FileMode
  • 最后从同一类中的其他构造函数调用构造函数

    我在这里读到可以调用另一个构造函数从同一类中的另一个构造函数调用构造函数 https stackoverflow com questions 829870 calling constructor from other constructor

随机推荐

  • 如何在 SQL 中返回每个组的增量组号

    我想在 SQL 中创建一个数据查询 以增量方式对行组进行编号 在公共日期时间分组 并保持 组编号 在下一个日期时间递增 依此类推 正如我在使用分区语句时所看到的那样 这些 组号 不得为每个组重置 这是我的示例数据 ts DateTime I
  • 从 gwt 中的代码触发点击事件

    我在 gwt 中创建了一个自定义小部件 它扩展了复合材料 我正在其中使用焦点面板 对于 FocusPanel 我添加了 ClickHandler 然后我添加了键盘监听器 现在按 Enter 键 它应该触发单击事件 任何人都可以提供帮助吗 我
  • Objective-C 运算符 (?) 和 (:)

    做什么的 and 这里表示 define MAX a b a gt b a b 这是一个三元运算符 http en wikipedia org wiki Ternary operation 也可用于 C 语言 Objective C 是 C
  • 如何在 geom_tile ggplot 中移动图块右/左端的刻度线和标签?

    我无法将 geom tile 中的 x 轴标签 包括刻度线 移动到每个图块的右端 我还想在左端添加零 我尝试过休息和标签 但没有运气 使用中断和标签也不起作用 我试图实现这个答案中所做的事情 但建议的解决方案不起作用 如何强制 x 轴刻度线
  • 如何将 $_GET 路径与 file_exists 一起使用并保证其安全?

    我有一个函数可以通过 jQuery 检查文件是否存在 该函数调用 PHP 脚本 在单击索引页面上的按钮更改某些图像时将使用该脚本 jQuery 函数 function fileExists path getJSON ajax fileExi
  • 标准化 sql server 中迄今为止不同格式的 varchar 字段

    我知道过去曾被问过类似的问题 但他们仍然没有为我的案例提供适当的解决方案 我有一个数据库表 第三方 其中有varchar列为datetime value 它包含以下格式的日期 11181980 8 18 1960 10 01 1960 04
  • 如何在 sbt 中为我的项目设置系统属性?

    我确信我错过了一些非常简单的东西 我想设置系统属性java awt headless to true对于我的 sbt 项目 正在阅读属性页面 http code google com p simple build tool wiki Pro
  • 如何在pyspark中分解数据框的多列

    我有一个数据框 其中包含类似于以下内容的列中的列表 所有列中列表的长度不相同 Name Age Subjects Grades Bob 16 Maths Physics Chemistry A B C 我想以这样的方式分解数据框 以获得以下
  • Objective-C 和 Cocoa 有什么区别?

    我正在学习 Mac 上的 Objective C Cocoa 编程 我一直使用的所有教程 书籍 博客 播客等实际上都涵盖了这两者 有没有一种简单的方法来区分哪些部分是普通的 Objective C 哪些部分来自 Cocoa Objectiv
  • 从具有不同列数的两个表中选择 *

    我如何从两个不同的表中选择不同的列 例如 SELECT username email FROM table1 UNION SELECT FROM table2 WHERE username user1 我收到错误 1222 The used
  • 在 Mac 上安装 numpy 以在 AWS Lambda 上运行

    有没有办法安装numpy在 Mac 上 以便上传到 AWS Lambda 后可以正常工作 我尝试过各种不同的方法 包括使用不同的方法pip版本 使用easy install 和以下这个帖子 https stackoverflow com q
  • 由于随机给定的字符,我无法从 firebase 更新数据

    这是我的 firebase 我不知道如何在 firebase 中输入或获取该路径 我想更改该随机字符内的密码 要更新数据库中的特定值 您必须知道该值的完整路径 如果您知道电子邮件地址 但不知道该电子邮件地址的键 则可以使用查询来查找该电子邮
  • 如何从div中获取innerHTML?

    我需要保存 div 的 innerHTML 并将其存储在 cookie 中 这是我的基本代码 The div saving function function addStatus sName getElement bottomDiv inn
  • 以编程方式确定远程桌面协议版本?

    远程桌面协议版本 6 1 更改了 RDP 会话的处理方式 将会话 0 以前表示 控制台会话 更改为非交互式会话 我需要能够从我的程序中弄清楚如何确定当前 RDP 会话正在使用哪个版本的 RD 协议 然而 我在 Windows 终端服务 AP
  • 通过 shell 脚本从文件中读取值并将值放入 WHERE 子句中

    外壳脚本 bin bash sqlplus s
  • 如何在 osx 机器上安装要在 php 中使用的“语言环境”?

    我正在开发一个需要多语言支持的网站 我正在尝试在 php 中使用语言环境 但某个语言环境 es CO 在我的开发计算机中不可用 它位于我的托管服务器上 我研究了如何添加新的区域设置 但找不到如何或在哪里获取新的区域设置文件 它应该安装在操作
  • 方法存在时出现 Java NoSuchMethodError

    我正在参考PlayerUtil getMovementSpeed player 在我的 Speed 类和 PlayerUtil 类中 我将方法定义为 public static double getMovementSpeed Player
  • Python pandas 在滚动日期窗口中最常见的值

    我有一个包含以下数据的 pandas 数据框 我想添加一个新列 对于每个日期 返回过去 3 天内最常出现的 weather type 如果结果是平局 我希望返回最近的 weather type d date 17 02 2017 18 02
  • 身份服务器流程

    IdentityServer 支持不同的 OpenId Connect 流 这些流定义在Flows https github com IdentityServer IdentityServer3 blob 4a44a9f03879c85bb
  • 如何在 ASP.NET MVC 4 中使用 Autofac 注入 HttpContextBase

    我在用ASP MVC 4 and Autofac 我已在我的中注册了以下内容global asax cs file ContainerBuilder builder new ContainerBuilder builder Register