3 Stimmen

Die besten Methoden zur Bereinigung des ViewModelLocators

ViewModel in meiner MVVM Light-Anwendung verfügt über einige Resourcen, die beim Schließen der Anwendung entsorgt werden müssen. Ich habe eine CleanUp-Methode im ViewModelLocator, um dies zu tun. Wo ist der richtige Ort in meiner Anwendung, um die CleanUp-Methode aufzurufen.

public class ViewModelLocator
{
    /// 
    /// Initialisiert eine neue Instanz der Klasse ViewModelLocator.
    /// 
    public ViewModelLocator()
    {
        ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);

        SimpleIoc.Default.Register();
    }
    public MainViewModel Main
    {
        get
        {
            return SimpleIoc.Default.GetInstance();
        }
    }
    public static void Cleanup()
    {
        var main = SimpleIoc.Default.GetInstance();
        main.Dispose();
    }
}
public class MainViewModel:ViewModelBase, IDisposable
{

    public void Dispose()
    {
       disposableResoure.Dispose();
    }
}

1voto

AwkwardCoder Punkte 23402

Sie könnten das Schließen- oder Geschlossen-Ereignis in der MainWindow-Klasse der Application-Klasse verwenden - wahrscheinlich ist es am besten, das Geschlossen-Ereignis zu verwenden, da das Fenster dann nicht mehr sichtbar ist.

http://msdn.microsoft.com/de-de/library/system.windows.application.mainwindow(v=vs.110).aspx

Oder Sie könnten das Beenden-Ereignis in der Application-Klasse verwenden.

http://msdn.microsoft.com/de-de/library/system.windows.application.exit(v=vs.110).aspx

0voto

Scott Meddows Punkte 11

Wenn Sie die Anwendung verlassen, warum sollten Sie dann überhaupt Ressourcen bereinigen? Das Betriebssystem wird das tun, wenn der Prozess beendet wird. Sie möchten Dispose() auf einem IDisposable aufrufen, wenn Sie die Ressource nicht mehr benötigen, damit Sie alle nicht verwalteten Ressourcen bereinigen können. Wenn der Prozess verworfen wird, besteht kein Bedarf, ihn aufzurufen, da die Garbage Collection im Speicherbereich nach dem Beenden des Prozesses nicht mehr stattfinden wird.

Ich stimme zu, dass das Bereinigen von Ressourcen nachdem Ihr Fenster aus dem "Blickfeld" des Benutzers verschwunden ist und nicht mehr benötigt wird, wichtig ist, aber das Ende des Prozesses ist nicht notwendig.

Hier ist eine andere Möglichkeit, die Methode Cleanup() zu verwenden:

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X