【问题标题】:How do I make sure that there is one NHibernate ISession per request using Autofac?如何使用 Autofac 确保每个请求都有一个 NHibernate ISession?
【发布时间】:2008-12-11 15:03:24
【问题描述】:

我的 Application_Start 方法中使用的 Autofac 模块中有以下代码:

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

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

存储库的构造函数将 ISession 作为参数。但我最终为整个应用程序创建了一个会话,即使我明确要求它是 HttpRequestScoped。

我已经配置了 ContainerDisposal HTTP 模块。

根据documentation,您必须创建一个嵌套容器,但我让 Autofac 自动装配依赖项。

我该怎么办?

谢谢!

【问题讨论】:

    标签: asp.net-mvc nhibernate dependency-injection autofac


    【解决方案1】:

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

    我使用默认范围注册了我的存储库,在 Autofac 中是单例范围。我应该这样做:

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

    【讨论】:

    • 注意:在 Autofac2 中,默认值已经改变 - 现在是:'factoryScoped' AKA 'InstancePerDependancy' 在新的说法中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-05
    相关资源
    最近更新 更多