2008-12-20 5 views
5

Auf meiner Suche nach NHibernate habe ich die nächste Hürde genommen; Wie sollte ich es mit StructureMap integrieren?mit (Fluent) NHibernate mit StructureMap (oder einem beliebigen IoCC)

Obwohl Codebeispiele sehr willkommen sind, interessiere ich mich mehr für das allgemeine Verfahren.

Was ich vorhatte, war Tun ...

  • Verwenden Fluent NHibernate meine Klassenzuordnungen für in NHibs Konfiguration Gebrauch erstellen
  • Implementieren ISession und ISessionFactory
  • Bootstrap eine Instanz meiner ISessionFactory in StructureMap als Singleton
  • Register ISession mit StructureMap, mit pro-Httprequest-Caching

Muss ich jedoch am Ende der HttpRequest-Methode nicht verschiedene Aufräummethoden für meine Sitzungsinstanz aufrufen (weil das das Ende ihrer Lebensdauer ist)?

Wenn ich die Aufräumaktion in Dispose() mache, wird Strukturplan das für mich übernehmen?

Wenn nicht, was soll ich tun?

Dank

Andrew

+1

In Ihrem zweiten Punkt erwähnen Sie die Implementierung von ISessionFactory und ISession. Sie möchten diese nicht selbst implementieren. Möglicherweise möchten Sie eine Art "Manager" implementieren, der Ihnen den Zugriff auf die ISessionFactory und das Öffnen/Schließen von Sitzungen ermöglicht. –

+0

Sind sie bereits in NHib implementiert? In welchem ​​Namensraum sind sie? –

+2

Sie befinden sich im NHibernate.Impl-Namespace, aber Sie greifen auf sie über Configuration.BuildSessionFactory() und ISessionFactory.OpenSession() zu. –

Antwort

4

Ich verwende StructureMap mit fluent-nhibernate (und NH Validator) in 3 meiner aktuellen Projekte. 2 davon sind ASP MVC Apps und der dritte ist ein WCF Web Service.

Ihre allgemeine Strategie klingt richtig (außer Sie werden nicht Ihre eigene Session oder SessionFactory machen, wie bereits in Kommentaren erwähnt). Einzelheiten hängen bleibt meinen Konfigurationscode von hier:

http://brendanjerwin.github.com/development/dotnet/2009/03/11/using-nhibernate-validator-with-fluent-nhibernate.html

Der Beitrag ist wirklich über NH Validator Integration und Fluent-NHibernate aber Sie können genau sehen, wie ich die Sitzung Fabrik und ISession mit StructureMap im „Bonus registrieren "Abschnitt der Post.

RE: Aufräumen: Sie sollten versuchen, immer innerhalb einer Transaktion zu arbeiten und entweder die Transaktion am Ende Ihrer Arbeitseinheit festschreiben oder zurücksetzen. NH nutzt nur SQL Connections, wenn sie benötigt werden und kümmert sich um die Bereinigung dieser begrenzten Ressource für Sie. Die normale Speicherbereinigung kümmert sich selbst um Ihre Sitzungen.

Die Session Factory ist ein sehr teures Objekt, das Sie nur einmal initialisieren und für die gesamte Lebensdauer Ihrer App beibehalten möchten.

+1

Der obige Link ist kaputt, es sollte http://brendanjerwin.github.com/development/dotnet/2009/03/11/using-nhibernate-validator-with-fluent-nhibernate.html –

+0

Danke, ich reparierte den Link in der Antwort. – brendanjerwin

+0

Es ist wieder kaputt –

0

Ich habe Strukturkarte nicht benutzt, aber maybee Ich kann Ihnen noch helfen, führen in die richtige Richtung. Fluent nHibernate ist eine hervorragende Wahl für die hbm-Dateien.

Wie bei der http-Anfrage müssen Sie nicht sicherstellen, dass Sie die Sitzung schließen, wenn die http-Anfrage endet. Wenn Sie das nicht tun, werden Sie am Ende die nHibernate-Sitzung verlieren. Ich bin nicht sicher, ob Strukturkarte das für Sie behandeln wird, was ich getan habe, ist, dass ich ein HTTP-Modul habe, das die Sitzung schließt.

Eine Sache zu beachten, dass mich beißen, ist, dass Sie sicherstellen, dass Sie alle Ihre Datenzugriff in einer Transaktion wickeln und sicherzustellen, dass nHibernate seine Änderungen tatsächlich festlegt. Wenn Sie dies während des Schließens der Sitzung tun, könnten Sie die Möglichkeit verpassen, Fehler zu behandeln. Ich bin neugierig zu hören, was Sie getan haben, um diese Arbeit zu bekommen.