c# - Autofact 不尊重 InstancePerRequest
问题描述
我在带有 Web API 的 MVC 项目上使用 Autofac。
我正在注册所有控制器:
builder.RegisterControllers(assembly);
builder.RegisterApiControllers(assembly);
和
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container);
我也在使用 OWIN,并且我正在注册UserManager
每个 OWIN 请求:
app.CreatePerOwinContext(() => AutofacDependencyResolver.Current.GetService<UserManager>());
UserManager
需要一个 的实例,该实例DbContext
被配置为每个请求实例化一次:
builder.RegisterType<DbContext>()
.AsSelf()
.InstancePerRequest();
这是问题所在:
访问 Web API 控制器时,DbContext
会创建一个来满足CreatePerOwinContext
调用。然后,在我的控制器中,我注入了另一个DbContext
,并且我希望注入到控制器中的实例与CreatePerOwinContext
调用中创建的实例相同,但事实并非如此!如果我访问 MVC 控制器,一切都会按预期工作。
我认为 Autofac 正在使用两个不同的解析器,而不是在它们之间共享实例。我该如何解决这个问题?
解决方案
推荐阅读
- python - 将 TensorFlow 数据集转换为图像和标签
- javascript - 检测和调整动态 HTML 中图像的宽度和高度
- php - PHP exec 在终端中工作,但不能通过 URL
- postgresql - 从 postgres 发送带有附件的电子邮件
- unity3d - Unity 2D 动画
- spring - Spring Boot 框架需要 Spring 安全管理控制台
- java - Java file.createNewFile() 虽然创建了文件但返回 false
- sql-server - 如何在flutter中连接easypaisa/jazzcash支付网关?
- git - 在 Jenkins 构建过程中如何避免圆形标签?
- html - 删除按下图标周围的边框