2016-08-16 3 views
1

Ich habe eine statische Klasse für die Bereitstellung einer Verbindung zu einem Dataset.Wiederholender Aufruf von Methoden

Ich habe statische gewählt, so dass jede Klasse den Datensatz aufrufen kann, ohne es jedes Mal zu initialisieren.

Also diese Klasse enthält eine Methode public static void Init() {...}, wo ich den Datensatz mit den Tabellenadaptern fülle.

Auch habe ich mehrere Methoden, die Abfrage für mich, um Dataset Queries von der anderen Codelogik zu trennen.

In jeder dieser Methoden muss ich prüfen, ob der Datensatz bereits initialisiert ist.

Hier ist meine Frage: Gibt es eine Möglichkeit, diese Überprüfung zu tun, welche Funktion dieser Klasse aufgerufen wird, ohne sie in jeder Funktion explizit zu implementieren?

Oder gibt es einen grundlegenden Fehler in meiner Modellierung dieses DB-Zeug?

Vielen Dank im Voraus!

Antwort

3

Ich schlage vor, mit Lazy<T>:

private static Lazy<DataSet> CoreMyDataSet = new Lazy<DataSet>(() => { 
    Init(); 

    // ... Other code if required  

    // return dataset created 
    return s_MyDataSet; 
}); 

public static DataSet MyDataSet { 
    get { 
    return CoreMyDataSet.Value; 
    } 
} 
+0

Sehr gute Auflösung :) Vielen Dank. –

1

Nun, das ist nur das grundlegende Problem mit statischem Code ist. Sie wissen nie, in welchem ​​Zustand ein anderer Teil Ihres Codes es verließ ... Nun, nicht nie, aber Sie bekommen die Idee.

Was macht Ihr Code, wenn Sie die Initialisierung überprüfen, fehlschlägt? Kannst du es sofort initialisieren oder hörst du mit der Ausführung auf?

Eine Methode wäre, in Ihren Methoden Ihrer statischen Klasse nach der Initialisierung zu suchen und alles zu tun, was der Aufrufer tun würde, wenn die Prüfung fehlschlägt. Aber das hängt stark von Ihren Möglichkeiten ab.

+0

Ja, so habe ich es bisher gemacht. Atm Ich überprüfe jede Methode Meine Init-Methoden füllt nur die Datensätze. –