2012-11-25 60 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的構造和使用的解決我所需要的。

它似乎在工作。謝謝。