我正在通过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正在使用两个不同的解析器,而不在它们之间共享实例。 我该怎么解决?