Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Windsor + NHibernate + ISession + MVC

I am trying to get Windsor to give me an instance ISession for each request, which should be injected into all the repositories

Here is my container setup

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<>))
    );

Its based upon a StructureMap post here http://www.kevinwilliampang.com/2010/04/06/setting-up-asp-net-mvc-with-fluent-nhibernate-and-structuremap/

however, when this is run, a new Session is created for every object it is injected too. what am I missing?

(FYI the NHibernateHelper, sets up the config for Nhib)

like image 644
dbones Avatar asked Dec 23 '22 03:12

dbones


1 Answers

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()));
like image 177
Sly Avatar answered Jan 05 '23 21:01

Sly