我正在尝试让Windsor为每个请求提供一个实例ISession,它应该被注入到所有存储库中
这是我的容器设置
container.AddFacility<FactorySupportFacility>().Register(
Component.For<ISessionFactory>().Instance(NHibernateHelper.GetSessionFactory()).LifeStyle.Singleton,
Component.For<ISession>().LifeStyle.Transient
.UsingFactoryMethod(kernel => kernel.Resolve<ISessionFactory>().OpenSession())
);
//add to the container
container.Register(
Component.For<IActionInvoker>().ImplementedBy<WindsorActionInvoker>(),
Component.For(typeof(IRepository<>)).ImplementedBy(typeof(NHibernateRepository<>))
);它基于http://www.kevinwilliampang.com/2010/04/06/setting-up-asp-net-mvc-with-fluent-nhibernate-and-structuremap/上的一篇StructureMap帖子
但是,当它运行时,也会为它注入的每个对象创建一个新的会话。我遗漏了什么?
(仅供NHibernateHelper使用,为Nhib设置配置)
发布于 2010-04-20 10:33:58
ISession应具有LifeStyle.PerWebRequest。但是您可以只使用NHibernate facility而不是手动处理这些事情。
发布于 2010-04-20 15:17:03
container.AddFacility<FactorySupportFacility>();
container.Register(Component.For<ISessionFactory>()
.LifeStyle.Singleton
.UsingFactoryMethod(() => new NhibernateConfigurator().CreateSessionFactory()));
container.Register(Component.For<ISession>()
.LifeStyle.PerWebRequest
.UsingFactoryMethod(kernel => kernel.Resolve<ISessionFactory>().OpenSession()));https://stackoverflow.com/questions/2671625
复制相似问题