3

我在 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 模块。

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

我该怎么办?

谢谢!

4

1 回答 1

8

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

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

builder.Register<NHibernateSomethingRepository>()
    .As<ISomethingRepository>()
    .HttpRequestScoped;
于 2008-12-12T10:00:27.480 回答