Нет компонента для обслуживания в веб-приложении NHibernate - PullRequest
1 голос
/ 07 сентября 2010

Я использую NHibernate в своем веб-приложении. В какой-то момент он входит в цикл (может выполняться несколько потоков), где он делает много обращений к базе данных. Некоторое время он работает нормально, а затем завершится с ошибкой (когда я вызываю UnitOfWork.Start ()):

Не найдено ни одного компонента для поддержки службы Rhino.Commons.IUnitOfWorkFactory

Как только я получаю эту ошибку в потоке, все последующие вызовы UnitOfWork.Start () (в этом потоке) завершаются ошибкой по той же причине. Как только поток исчезает, проблема, кажется, исчезает так же загадочно, как и появилась.

При просмотре кода Rhino.Commons кажется, что метод Resolve не работает. Компонент зарегистрирован в файле моего приложения Global.asax.cs, поэтому я не понимаю, почему периодически происходит сбой Resolve. Как будто мое приложение теряет регистрацию компонента на короткий промежуток времени. Что вызывает это и что я могу сделать, чтобы решить это?

Частичная трассировка стека:

at Castle.MicroKernel.DefaultKernel.get_Item(Type service)
at Castle.Windsor.WindsorContainer.Resolve(Type service)
at Castle.Windsor.WindsorContainer.Resolve[T]()
at Rhino.Commons.IoC.Resolve[T]()
at Rhino.Commons.UnitOfWork.Start(IDbConnection connection, UnitOfWorkNestingOptions nestingOptions)

Global.asax.cs моего приложения:

public class Global: UnitOfWorkApplication
{
   protected override IWindsorContainer CreateContainer(string aWindsorConfig)
   {
      IWindsorContainer container = new WindsorContainer();
      container.Register(Component.For<IUnitOfWorkFactory>().ImplementedBy<NHibernateUnitOfWorkFactory>());
      return container;
   }
}
...