Как мне убедиться, что для каждого запроса, использующего Autofac, существует одна NHibernate ISession?

У меня есть следующий код в модуле Autofac, который используется в моем методе Application_Start:

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

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

Конструктор для хранилища принимает ISession в качестве аргумента. Но я получаю один сеанс для всего приложения, хотя я явно просил, чтобы он был HttpRequestScoped.

Я настроил HTTP-модуль ContainerDisposal.

Согласно документации, вы должны создать вложенный контейнер, но я позволяю Autofac автоматически связывать зависимости.

Что мне делать?

Спасибо!

11.12.2008 15:03:24
1 ОТВЕТ
РЕШЕНИЕ

Я нашел проблему, поэтому я отвечу на свой вопрос.

Я зарегистрировал свой репозиторий с областью по умолчанию, которая в Autofac является одноэлементной областью. Я должен был сделать это:

builder.Register<NHibernateSomethingRepository>()
    .As<ISomethingRepository>()
    .HttpRequestScoped;
8
12.12.2008 10:00:27
ПРИМЕЧАНИЕ: в Autofac2 значение по умолчанию изменилось - теперь это: «factoryScoped» AKA «InstancePerDependancy» в новом языке.
UpTheCreek 8.05.2010 15:30:29