Я пытаюсь использовать ограниченный образ жизни для своей сессии NHibernate (я бегло использую) в роли Windows Azure.
При инициализации фабрики сеансов я получаю следующее исключение:
Тип 'Castle.MicroKernel.Lifestyle.Scoped.CallContextLifetimeScope' в сборке 'Castle.Windsor, версия = 3.0.0.0, Culture = нейтральный, PublicKeyToken = 407dd0808d44fbdc' не помечен как сериализуемый.
Регистрация на сеанс:
container.Register(Component.For<ISession>()
.UsingFactoryMethod(k => k.Resolve<ISessionFactory>().OpenSession())
.LifestyleScoped()
);
Реализация:
using (this.windsorContainer.BeginScope())
{
var job = this.windsorContainer.Resolve<TJob>();
try
{
job.Run();
}
finally
{
this.windsorContainer.Release(job);
}
}
Причина использования области действия - избегать открытых сессий, пока поток не работает. Конечно, я мог бы выделить новый поток и обработать сеанс для каждого потока, но это скорее хак, чем решение)