使用Castle Windsors LifestylePerWebRequest的NHibernate会话

时间:2012-05-12 11:37:33

标签: asp.net-mvc-3 nhibernate fluent-nhibernate castle-windsor

使用Castle Windsor作为我的IoC容器和NHibernate我有以下注册:

Component.For<ICustomSessionFactory>()
  .ImplementedBy<MsSql2008SessionFactory>().LifeStyle.Singleton,

Component.For<ISession>()
 .UsingFactoryMethod(kernel => kernel.Resolve<ICustomSessionFactory>()
     .OpenSession()).LifeStyle.PerWebRequest,

其中ISessionNHibernate.ISession

这很有效。我的问题是关闭ISession

温莎城堡会处理我的会议结束还是我需要自己关闭它?

我在documentation中看到:

  

因此,Windsor知道何时释放每个Web请求对象   它会在不需要你采取任何行动的情况下完成。

这是否意味着默认处理会话结束?

1 个答案:

答案 0 :(得分:1)

是的,windsor会为你关闭会议。

您还可以记录所有容器信息:

        void ConfigureContainer()
        {
            _container = new WindsorContainer();

            _container.Install(new LoggerInstaller());
            _logger = _container.Resolve<ILogger>();

#if DEBUG
            _container.Kernel.ComponentRegistered += (k, h) => _logger.Debug(String.Format("Registered {0} - {1}/{2}", k, h.ComponentModel.ComponentName.Name, h.ComponentModel.Implementation.FullName));
            _container.Kernel.ComponentDestroyed += (k, h) => _logger.Debug(String.Format("Destoyed {0} - ", k.ComponentName.Name));
#endif
            _container.Install(new ContainerInstaller());
            _container.Install(new NHibernateInstaller());
            _container.Install(new ValidationInstaller());
        }