4 Stimmen

Windsor + NHibernate + ISession + MVC

Ich versuche, Windsor dazu zu bringen, mir für jede Anfrage eine Instanz ISession bereitzustellen, die in alle Repositories injiziert werden sollte

Hier ist mein Container-Setup

container.AddFacility().Register(
    Component.For().Instance(NHibernateHelper.GetSessionFactory()).LifeStyle.Singleton,
    Component.For().LifeStyle.Transient
        .UsingFactoryMethod(kernel => kernel.Resolve().OpenSession())
    );

// im Container hinzufügen
container.Register(
    Component.For().ImplementedBy(),
    Component.For(typeof(IRepository<>)).ImplementedBy(typeof(NHibernateRepository<>))
    );

Es basiert auf einem StructureMap-Beitrag hier http://www.kevinwilliampang.com/2010/04/06/setting-up-asp-net-mvc-with-fluent-nhibernate-and-structuremap/

jedoch wird bei Ausführung eine neue Sitzung für jedes Objekt erstellt, in das es injiziert wird. Was fehlt mir?

(FYI: Der NHibernateHelper richtet die Konfiguration für Nhib ein)

9voto

Sly Punkte 14578
container.AddFacility();
container.Register(Component.For()
                            .LifeStyle.Singleton
                            .UsingFactoryMethod(() => new NhibernateConfigurator().CreateSessionFactory()));

container.Register(Component.For()
                            .LifeStyle.PerWebRequest
                            .UsingFactoryMethod(kernel => kernel.Resolve().OpenSession()));

2voto

Mauricio Scheffer Punkte 97391

Die ISession sollte LifeStyle.PerWebRequest haben. Aber Sie können einfach die NHibernate-Facility verwenden, anstatt diese Dinge manuell zu behandeln.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X