自动事实不遵守InstancePerRequest

时间:2018-09-18 04:09:52

标签: c# asp.net-mvc asp.net-web-api2 owin autofac

我正在通过Web API在MVC项目上使用Autofac。

我正在注册所有控制器:

builder.RegisterControllers(assembly);
builder.RegisterApiControllers(assembly);

DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container);

我也在使用OWIN,并且正在为每个OWIN请求注册UserManager

app.CreatePerOwinContext(() => AutofacDependencyResolver.Current.GetService<UserManager>());

UserManager需要一个DbContext的实例,该实例被配置为每个请求实例化一次:

builder.RegisterType<DbContext>()
       .AsSelf()
       .InstancePerRequest();

问题出在这里

访问Web API控制器时,将创建一个DbContext来满足CreatePerOwinContext的调用。 然后,在我的控制器中,我注入了另一个DbContext,我希望注入到控制器中的实例与在CreatePerOwinContext调用中创建的实例相同,但不是! 如果我访问MVC控制器,则一切正常。

我认为Autofac正在使用两个不同的解析器,而不在它们之间共享实例。 我该怎么解决?

0 个答案:

没有答案