File Handle Manager



  • Hey!

    Folgende Situation: Ich habe einen "File Handle Manager" (Singleton), der eine Datei laden kann und diese als Objekt an den Aufrufenden zurückgibt. Ist die Datei bereits geladen, gibt er das entsprechende, bereits bestehende Objekt zurück. Die Aufrufenden können so das Objekt im Speicher direkt bearbeiten.

    Bei den Aufrufenden handelt es sich grob um GUIs, die auch Informationen aus der verwendeten Datei anzeigen. Wird diese in einer GUI geändert, ändert sich die Information auch gleichzeitig in den anderen GUIs, die ebenfalls diese Datei verwenden.

    Das Problem: Die GUIs sollen die Möglichkeit haben, die verwendete Datei zu ändern. Bedeutet also, den File Handle Manager um eine neue Datei-Referenz zu bitten. Schreibe ich aber

    MeineGUI.Datei = FileHandleManager.Instance.GetFile("C:\A.xml");
    

    so bekommt jede GUI, welche auch die vorherige Datei referenziert hat, nun auch die neue Datei, was ich aber vermeiden möchte...

    Kurzes Beispiel nochmal:

    // Initial drei Fenster, welche auf die selbe Datei verweisen
    Gui_1.Datei = FileHandleManager.Instance.GetFile"C:\A.xml");
    Gui_2.Datei = FileHandleManager.Instance.GetFile"C:\A.xml");
    Gui_3.Datei = FileHandleManager.Instance.GetFile"C:\A.xml");
    
    // Fenster 1 soll eine andere Datei anzeigen
    Gui_1.Datei = FileHandleManager.Instance.GetFile"C:\B.xml");
    
    // Ergebniss: Alle Fenster zeigen nun auf das gleiche Datei-Objekt
    

    Ich hoffe, ich konnte mich verständlich ausdrücken und bitte um Hilfe...



  • _dennis schrieb:

    Ich hoffe, ich konnte mich verständlich ausdrücken

    Nee.



  • Hallo _dennis,

    verstanden habe ich dich schon, jedoch frage ich mich, warum nach der letzten Zuweisung

    Gui_1.Datei = FileHandleManager.Instance.GetFile("C:\B.xml"); // <- Klammer-auf fehlte ;-)
    

    jetzt plötzlich die anderen GUI-Instanzen auch diese Referenz haben sollen?
    Dann hast du wohl einen Fehler in deiner GetFile-Implementierung. Oder hast du etwa die Eigenschaft GUI.Datei als 'static' deklariert?



  • Singleton? Böööse!



  • Danke Th96 für Deine Antwort, Du hast mir zumindest bestätigt, dass sich die Referenzen der anderen Views auf die Datei nicht ändern dürfen. Ich habe dann nochmal von vorne gesucht und den Fehler an einer anderen Stelle gefunden (die Property, die im PropertyGrid mit der Funktion zur Dateiauswahl verknüpft war, änderte direkt das Datei-Objekt, welches aktuell als Referenz der View zugewiesen war.. naja, wahrscheinlich für euch ebenso unverständlich gerade..)

    Also.. Danke noch einmal für die Hilfe!



  • beurteiler schrieb:

    Singleton? Böööse!

    Also Grundsätzlich ist an Singletons erstmal garnichts auszusetzen. Auch wenn in diesem Fall meiner Meinung nach kein Singleton notwendig ist.



  • @inflames2k Warum bist Du dieser Meinung?



  • Weil es so ist. Als Lösung für dein Grundsätzliches Problem. - Liefer beim GetFile ein Filehandle mit (z.B. als GUID oder ähnliches) und erweitere die Methode um das FileHandle.

    Wird das FileHandle übergeben, lieferst du die bestehende Datei zurück ansonsten eine neue Instanz.



  • Hey,

    ich nochmal:

    // Initial zwei Fenster, welche auf die selbe Datei verweisen
    Gui_1.Datei = FileHandleManager.Instance.GetFile"C:\A.xml");
    Gui_2.Datei = FileHandleManager.Instance.GetFile"C:\A.xml");
    
    // Auszug aus GetFile(string file)
    public File GetFile(string file)
    {
      // Nachgucken, ob die Datei schon in Liste ist
      // Wenn ja, dann das entsprechende Objekt zurückgeben
      // Wenn nein, dann
      File myFile = File.Deserialize(string file);
      // Zur Liste hinzufügen
      return myFile;
    }
    
    // Nun EventHandler in den Views zuweisen
    // In View 1:
    Datei.PropertyChanged += File_PropertyChanged;
    // In View 2:
    Datei.PropertyChanged += File_PropertyChanged;
    

    Ich möchte, dass eine Änderung der Datei in View 1 auch in View 2 zu sehen ist. Leider funktioniert das nicht. Der Speicher des Datei-Objekts wird verändert, die GUI aktualisiert sich aber nicht.

    Frage: Sind die EventHandler denn nicht an die selbe Instanz des Datei-Objekts "angehängt"? ..und müssten dann in beiden Views auf Veränderung reagieren? Oder habe ich "C# falsch verstanden"?

    (Bei meinem vorherigen Problem ging es auch darum, allerdings wurden die dort gebrauchten Infos aus der Datei, da im PropertyGrid dargestellt, separat nochmal "refreshed", daher funktionierte das. Nun dachte ich, das funktioniert auch ohne refresh der GUI...)



  • Ok, sorry, hat sich erledigt, war wieder ein fehler woanders...


Anmelden zum Antworten