Asp.net mvc 如何使用Autofac确保每个请求有一个NHibernate会话?

Asp.net mvc 如何使用Autofac确保每个请求有一个NHibernate会话?,asp.net-mvc,nhibernate,dependency-injection,autofac,Asp.net Mvc,Nhibernate,Dependency Injection,Autofac,我的应用程序启动方法中使用的Autofac模块中有以下代码: builder.Register(c => new Configuration().Configure().BuildSessionFactory()) .SingletonScoped(); builder.Register(c => c.Resolve<ISessionFactory>().OpenSession()) .HttpRequestScoped(); builder.Regis

我的应用程序启动方法中使用的Autofac模块中有以下代码:

builder.Register(c => new Configuration().Configure().BuildSessionFactory())
    .SingletonScoped();
builder.Register(c => c.Resolve<ISessionFactory>().OpenSession())
    .HttpRequestScoped();

builder.Register<NHibernateSomethingRepository>().As<ISomethingRepository>();
builder.Register(c=>newconfiguration().Configure().BuildSessionFactory())
.singletonscope();
builder.Register(c=>c.Resolve().OpenSession())
.HttpRequestScope();
builder.Register().As();
存储库的构造函数将ISession作为参数。但我最终为整个应用程序创建了一个会话,尽管我明确要求它是HttpRequestScope

我已经配置了ContainerDisposalHTTP模块

根据需要,您必须创建一个嵌套容器,但我让Autofac自动连接依赖项

我该怎么办


谢谢

我发现了问题,所以我会回答我自己的问题

我用默认作用域注册了我的存储库,在Autofac中是singleton作用域。我应该这样做:

builder.Register<NHibernateSomethingRepository>()
    .As<ISomethingRepository>()
    .HttpRequestScoped;
builder.Register()
.As()
.httprequestscope;

注意:在Autofac2中,默认设置已更改-现在,用新的说法是:“factoryScoped”AKA“InstancePerDependancy”。