0

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

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

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

ISession一个在哪里NHibernate.ISession

这很好用。我的问题是关于我的ISession.

Castle Windsor 会处理我的会话的结束,还是我需要自己关闭它?

我在文档中看到:

因此,Windsor 知道何时释放每个 Web 请求对象,并且无需您执行任何操作即可执行此操作。

这是否意味着会话的关闭是默认处理的?

4

1 回答 1

1

是的,温莎将为您关闭会话。

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

        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());
        }
于 2012-05-12T11:58:51.443 回答