Autor Beitrag
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Sa 02.04.11 10:28 
Hallo liebe Community,

hatte gestern auf Arbeit ein lustiges Problem, das mich fast zur Verzweifelung gebracht hat.
Kurze Umschreibung des Designs:
Also, ich habe eine Klasse "CustomDbConnection", die IDbConnection implementiert und eine andere DbConnection wrappt, also nur die Methoden bzw. Properties weiterleitet. Die Klasse schmeißt zwei Events. Eins, bevor sich der Status der Verbindung ändert (Open, Close), und eins danach. Die Events brauche ich, da ich auf einer Datenbank mit Applikationsrollen arbeite und so das aktivieren bzw. deaktivieren einer Rolle manage. So, also ich erstelle erstmal eine Instanz der Klasse und halte mir die Connection lokal (für die TableAdapter eines DataSets).

Dann gibt es noch eine Klasse "ConnectionManager", die im Konstruktor die Connection und die Credentials für die Applikationsrolle übergeben bekommt. Sie abboniert die beiden Events und handelt dann das aktivieren und deaktivieren der Rolle. Soweit so gut.

Jetzt zu dem Problem:
Bei der Anmeldung (was ja normalerweise nur 1x passiert) erzeuge ich eine Instanz des ConnectionManagers. Wenn nun allerdings die Credentials fehlerhaft sind, so muss ja die Anmeldung nochmal versucht werden. Also wird eine neue Instanz mit den neuen Credentials erzeugt. Wenn nun also beim zweiten Mal die Credentials korrekt sind, so scheitert die Anmeldung trotzdem, da die Eventhandler in dem "alten" Objekt aufgerufen werden. Habe jetzt erstmal eine Methode "SetNewCredentials" in die Klasse implementiert, aber das finde ich nicht so schön.

Wie könnte man denn das Problem umgehen?
Vielleicht die Connection erst im ConnectionManager erzeugen und als Property nach aussen geben? Oder ein Singleton :?

Vielen Dank schonmal an Euch.
Ansonsten ein schönes Wochenende