使用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
。
温莎城堡会处理我的会议结束还是我需要自己关闭它?
我在documentation中看到:
因此,Windsor知道何时释放每个Web请求对象 它会在不需要你采取任何行动的情况下完成。
这是否意味着默认处理会话结束?
答案 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());
}