Laden...

Einsatz von NHibernate in Prism-Anwendung?

Erstellt von roccabyte vor 13 Jahren Letzter Beitrag vor 13 Jahren 979 Views
R
roccabyte Themenstarter:in
12 Beiträge seit 2011
vor 13 Jahren
Einsatz von NHibernate in Prism-Anwendung?

Hallo,

ich bin gerade dabei, eine WPF-Anwendung nach dem MVVM-Pattern mit Prism zu entwickeln. Dazu habe ich mir die Prism-Doku durchgelesen und habe das Prinzip auch soweit verstanden.

Nun möchte jedoch, dass alle Daten in einer Datenbank gespeichert werden. Als Datenbank habe ich mir den SQL Server Compact 3.5 ausgesucht (zwecks lokaler Verfügbarkeit), das OR-Mapping übernimmt NHibernate sowie Fluent NHibernate.

Nun zu Prism: Ein lauffähiges Prism-Grundgerüst habe ich schon, aber eben noch ohne Datenbank. Im Netz findet man auch viel, aber dann doch immer nur zu dem einen oder dem anderen, aber überhaupt nicht, wie man beides in eine Anwendung gießt (jedenfalls habe ich noch kein Beispiel gefunden). Das Grundgerüst sieht momentan so aus:

  • "Common"-Projekt, dass so allgemeine Sachen definiert, wie z.B. Model, Interfaces (für Repositories, Services), Mappings, usw.
  • Startprojekt, dass den Bootstrapper und die Shell startet
  • Solution-Ordner mit den Modulen (die jeweils eine Referenz auf das Common-Projekt haben)

Jetzt habe ich mir gedacht, dass ich am besten den Zugriff auf die Datenbank in eine Service-Modul kapsele und so alles zentral an einer Stelle zur Verfügung habe. Die anderen Module, die die Services benutzen möchten, bekommen die konkreten Implementierung per DI injeziert. Aber wie muss ich NHibernate bzw. Fluent NHibernate in dem Service-Modul einsetzen bzw. konfigurieren, damit:

  • beim initialen Start der Anwendung eine Datenbank erstellt wird, falls noch keine existiert
  • alle konkreten Repository- und Service-Klassen in dem DI-Container registriert werden, damit die anderen Module darauf zugreifen können

Außerdem brauche ich ja beim Zugriff auf die Datenbank immer die SessionFactory in den Repository-Klassen. Wäre es hier nicht auch sinnvoll, die SessionFactory (die ja eh vom Typ ISessionFactory ist) per DI in die Klassen zu injezieren? Aber wie baue ich die SessionFactory mit Fluent NHibernate auf, damit die überhaupt injeziert werden kann?

Fragen über Fragen.

Wäre toll, wenn mir hier jemand einen Tipp geben könnte, wo ich da am besten ansetzen könnte.

Grüße

1.044 Beiträge seit 2008
vor 13 Jahren

Hallo roccabyte,

wo siehst du den Nachteil? Du hast unterschiedliche Layer. Die Layer sind mit Interfaces entkoppelt. Über DI werden dann die Klassen injizierst. Wenn du ein Interface angibst, ist es doch okay, weil du in der Situtation nicht direkt auf den Layer zugreifst.

zero_x

R
roccabyte Themenstarter:in
12 Beiträge seit 2011
vor 13 Jahren

Nachteil? 🤔
Was meinst du damit? Ich habe doch gar keine Nachteil genannt. Ich sehe in der Verwendung von Prism nur Vorteile, deswegen benutze ich es ja auch. Mir gehts eher darum, wie ich in dem Service-Modul den Datenbankzugriff ordentlich instanziieren kann, siehe:

Aber wie muss ich NHibernate bzw. Fluent NHibernate in dem Service-Modul einsetzen bzw. konfigurieren, damit:

  • beim initialen Start der Anwendung eine Datenbank erstellt wird, falls noch keine existiert
  • alle konkreten Repository- und Service-Klassen in dem DI-Container registriert werden, damit die anderen Module darauf zugreifen können

Außerdem brauche ich ja beim Zugriff auf die Datenbank immer die SessionFactory in den Repository-Klassen. Wäre es hier nicht auch sinnvoll, die SessionFactory (die ja eh vom Typ ISessionFactory ist) per DI in die Klassen zu injezieren? Aber wie baue ich die SessionFactory mit Fluent NHibernate auf, damit die überhaupt injeziert werden kann?