Asp MVC проблема настройки приложения с помощью Windsor и NHibernate
У меня возникли проблемы с настройкой приложения с использованием windsor, средств и nhibernate.
Я получаю это исключение:
ObjectDisposedException: Session is closed
Разве Виндзор не должен заботиться о создании сессии для каждого запроса и ее открытии, когда у меня есть такая конфигурация? Могу ли я пропустить некоторые настройки? Вот моя конфугурация:
public class PersistenceFacility : AbstractFacility
{
protected override void Init()
{
Configuration config = BuildDatabaseConfiguration();
Kernel.Register(
Component.For<ISessionFactory>()
.LifeStyle.Singleton
.UsingFactoryMethod(config.BuildSessionFactory),
Component.For<ISession>()
.LifeStyle.PerWebRequest
.UsingFactoryMethod(k => k.Resolve<ISessionFactory>().OpenSession()));
}
private Configuration BuildDatabaseConfiguration()
{
return Fluently.Configure()
.Database(SetupDatabase)
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<RnUlice>())
.ExposeConfiguration(ConfigurePersistence)
.BuildConfiguration() ;
}
......
}
2 ответа
Если твой Repository<T>
получает ISession в своем конструкторе и его синглтоне (стиль жизни по умолчанию), тогда он будет работать только в первом запросе, который вы называете своим хранилищем. В последующих запросах хранилище будет по-прежнему иметь тот же сеанс ISession, что и при первом вызове (поскольку хранилище одноразовое), но этот сеанс теперь закрыт и недопустим для использования, поэтому вы видите ошибку.
Вот почему в большинстве случаев вам не нужен синглтон, в зависимости от других компонентов с "более коротким" образом жизни (например, для каждого веб-запроса или переходного процесса).
Смотрите эту статью для более тщательного анализа общих проблем образа жизни.
Я понял, что случилось. Я забыл настроить свой образ жизни в хранилище для Transient. Я не совсем понимаю, как это проблема, хотя.
container.Register(Component.For(typeof(IRepository<>))
.ImplementedBy(typeof(Repository<>)).LifeStyle.Transient);
Интересно, каков стиль жизни по умолчанию тогда? Я читал в документах, что это синглтон?! Как это может быть проблемой?