1

我在 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 实例。现在我在同一个请求上得到不同的实例。

谢谢

4

1 回答 1

1

好的,我想我找到了答案 - 它无法完成.. 至少不能使用 DependencyResolver。

ASP .Net 4 Web Api RC + Autofac 手动解析

我按照评论中所说的做了,将 IComponentContext 添加到构造函数中,并用它来解决我需要的问题。

它似乎正在工作。谢谢。

于 2012-11-25T09:00:20.293 回答