2008-12-11 5 views
3

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

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.

В соответствии с documentation вам необходимо создать вложенный контейнер, но я разрешаю Autofac автоустанавливать зависимости.

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

Спасибо!

ответ

8

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

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

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

ПРИМЕЧАНИЕ: В Autofac2 по умолчанию изменилось - теперь: «factoryScoped» ака «InstancePerDependancy» в новом языке. – UpTheCreek 2010-05-08 15:30:29