首页 > 解决方案 > 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 正在使用两个不同的解析器,而不是在它们之间共享实例。我该如何解决这个问题?

标签: c#asp.net-mvcasp.net-web-api2owinautofac

解决方案


推荐阅读