2012-11-25 41 views
1

我在asp.net mvc和webapi项目中使用autofac。Autofac在asp.net mvc web api中返回不同实例

在配置我这样做:

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不同的实例。

我猜问题是因为这2行:

DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); 
config.DependencyResolver = new AutofacWebApiDependencyResolver(container); 

但我怎么可以让它返回同一个实例?

编辑:

只是为了更清楚 - 我每次的HttpRequest期待的Isession的同一个实例。现在我在同一请求中获得不同的实例。

感谢

+0

你如何注册ISession? –

+0

它在顶部,它说NHibernateConfigurator ..等,然后x.Resolve ()。OpenSession() – sirrocco

+0

你注册它为InstancePerHttpRequest但期望解决时有单个实例? –

回答

1

好吧,我想我找到了答案 - 它不能这样做..至少不会DependencyResolver。

ASP .Net 4 Web Api RC + Autofac manual resolving

我做了什么,它说,在评论中,添加IComponentContext的构造和使用的解决我所需要的。

它似乎在工作。谢谢。