Benutzer mit den meisten Antworten
Wie kriege ich Zugriff zu Core Klassen?

Frage
-
Habe folgendes Anfaenger Problem:
Ich erstelle eine MDI Windows Form Datenbank-Applikation. Neben den Forms habe ich 2 core Klassen Datenbank und Session, in denen ich haeufig verwendete Informationen abspeichere, die Interaktion mit der Datenbank abwickle etc. Nun ist mir nicht klar, wie und wo ich diese Klassen instanzieren soll, sodass ich von ueberall auf sie zugreifen kann. die Klassen sind nicht statisch, da ich ja gewisse Informationen zur Laufzeit in die Objekte einlesen und waehrend der Session verwenden will.
Der Eingangspunkt in die Applikation ist eine statische Klasse Program. Diese ruft das Hauptfenster auf: Application.Run(new Main());
Wenn ich nun versuche, eine public Instanz der Klassen Datenbank und Session in der Main Klasse erstelle, so habe ich ausserhalb von Main keinen Zugriff. z.B. instanziere ich in Main sowohl Datanbank wie auch Session. dann initialisiere ich das Session Objekt, waehrend der Initialisierung soll das Session Objekt auf Methoden der Datenbankklasse zugreifen. Aber eben, wie erreiche ich von Session Klassen, die in Main instanziert wurden? unter Main. erscheint da nichts.
Bin ueberzeugt da gibt es eine ganz einfache Loesung aber ich komm einfach nicht weiter. Vielen Dank fuer jede Hilfe.
Antworten
-
Hallo lcalmbach,
Es gibt viele Möglichkeiten: statische Felder, Parameterübergabe, Bereitstellung über Properties oder Funktionen, dependency injection, Singleton-Pattern usw. Hängt ganz davon ab, welche Anforderungen an die Klassen gestellt werden.
Wenn ich mir aber die semantische Seite deines Anliegens ansehe, dann scheint mit die Implementierung eines Singleton-Patterns am geeignetsten zu sein. Über Datenbank.Instance bzw. Session.Instance hättest Du so Zugriff auf die eindeutigen Instanzen der Datenbank/Session, die Du (wenn das so gewollt ist) von überall in deinem Code aufrufen kannst.
Gruß
Marcel- Als Antwort markiert Lukas Calmbach Samstag, 27. Oktober 2012 12:32
-
Hi,
das Anfängerproblem ist eher die Denkweise als die Instanzierung :)
Du kannst die Instanz erstellen und an die untergeordneten Elemente weiterreichen. Alternativ kannst Du auch mit einer statischen Klasse arbeiten, Du musst dann aber darauf achten, dass sich die einzelnen Aufrufe nicht in die Quere kommen.
Ich kenne mich mit MDI Anwendungen nicht aus, aus dem ASP.NET Bereich hat man immer die Problematik mit Multiuser/Multithreadingumgebungen im Auge zu behalten, da es ansonsten dazu kommt, dass sich die Objekte gegenseitig behindern. Dort gibt es aber den HttpContext, über den eine entsprechende Trennung möglich ist.
Wenn es bei dir keine mehrfachen Aufrufe aus unterschiedlichen Threads geben kann, denke ich, dass Du mit einer statischen Klasse am einfachsten vorankommst.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert Lukas Calmbach Samstag, 27. Oktober 2012 12:32
Alle Antworten
-
Hi,
das Anfängerproblem ist eher die Denkweise als die Instanzierung :)
Du kannst die Instanz erstellen und an die untergeordneten Elemente weiterreichen. Alternativ kannst Du auch mit einer statischen Klasse arbeiten, Du musst dann aber darauf achten, dass sich die einzelnen Aufrufe nicht in die Quere kommen.
Ich kenne mich mit MDI Anwendungen nicht aus, aus dem ASP.NET Bereich hat man immer die Problematik mit Multiuser/Multithreadingumgebungen im Auge zu behalten, da es ansonsten dazu kommt, dass sich die Objekte gegenseitig behindern. Dort gibt es aber den HttpContext, über den eine entsprechende Trennung möglich ist.
Wenn es bei dir keine mehrfachen Aufrufe aus unterschiedlichen Threads geben kann, denke ich, dass Du mit einer statischen Klasse am einfachsten vorankommst.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert Lukas Calmbach Samstag, 27. Oktober 2012 12:32
-
Hallo lcalmbach,
Es gibt viele Möglichkeiten: statische Felder, Parameterübergabe, Bereitstellung über Properties oder Funktionen, dependency injection, Singleton-Pattern usw. Hängt ganz davon ab, welche Anforderungen an die Klassen gestellt werden.
Wenn ich mir aber die semantische Seite deines Anliegens ansehe, dann scheint mit die Implementierung eines Singleton-Patterns am geeignetsten zu sein. Über Datenbank.Instance bzw. Session.Instance hättest Du so Zugriff auf die eindeutigen Instanzen der Datenbank/Session, die Du (wenn das so gewollt ist) von überall in deinem Code aufrufen kannst.
Gruß
Marcel- Als Antwort markiert Lukas Calmbach Samstag, 27. Oktober 2012 12:32