我在 asp.net mvc 和 webapi 项目中使用 autofac。
在配置中我这样做:
var builder = new ContainerBuilder();
builder.Register(x => NHibernateConfigurator.BuildSessionFactory()).SingleInstance();
builder.Register(x => x.Resolve<ISessionFactory>().OpenSession()).InstancePerHttpRequest();
builder.RegisterSource(new AnyConcreteTypeNotAlreadyRegisteredSource());
builder.RegisterControllers(Assembly.GetExecutingAssembly());
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
现在的问题是,在 api 控制器中,如果我通过构造函数注入 ISession 并调用
DependencyResolver.Current.GetService<ISession>()
它将返回 2 个不同的实例。
我猜这个问题是因为这两条线:
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
但是我怎样才能让它返回相同的实例呢?
编辑:
更清楚一点 - 我期望每个 HttpRequest 都有相同的 ISession 实例。现在我在同一个请求上得到不同的实例。
谢谢