Ich habe eine C# -WPF-Anwendung mit der MVVM Light framework erstellt. Meine Anwendung verwendet die Klasse ViewModelLocator
, um die Ansichtsmodelle zur Laufzeit zu finden. Die ViewModelLocator
macht Gebrauch von der SimpleIoc
Klasse, die auch mit der MVVM Light framework kommt.Zurücksetzen aller Instanzen im IOC-Container
Hier ist mein Szenario: Der Benutzer meldet sich an und kann meine Anwendung verwenden. Beim Abmelden möchte ich alle Viewmodel-Instanzen ablegen/zurücksetzen/neu erstellen, um dem nächsten Benutzer eine saubere Umgebung zu bieten.
Ich habe versucht, die Cleanup()
Methode in der ViewModelLocator
Klasse zu implementieren, aber es funktioniert nicht. Nicht arbeiten bedeutet, dass der (zweite) Benutzer die Daten des Benutzers sieht, der zuvor angemeldet war.
erster Versuch:
public static void Cleanup()
{
SimpleIoc.Default.Reset();
}
zweiter Versuch:
public static void Cleanup()
{
SimpleIoc.Default.Unregister<LoginViewModel>();
SimpleIoc.Default.Unregister<TaskViewModel>();
SimpleIoc.Default.Register<LoginViewModel>();
SimpleIoc.Default.Register<TaskViewModel>();
}
dritter Versuch (nicht das, was ich will, aber es ist eine Abhilfe):
public static void Cleanup()
{
// I implemented the ICleanup interface in my viewmodels
// The cleanup method clears all my variables eg: myCollection.clear();
SimpleIoc.Default.GetInstance<LoginViewModel>().Cleanup();
SimpleIoc.Default.GetInstance<TaskViewModel>().Cleanup();
}
Wie ich alle zurückgesetzt habe Instanzen in meiner ViewModelLocator
Klasse? Ich bin bereit, bei Bedarf einen fortgeschritteneren Ioc Container zu verwenden.
Was ist los mit dem dritten Ansatz? Können die Objekte nicht wiederverwendet werden? – Romoku
Ich habe einige Logik in meinen Konstruktoren, die einige Dinge für den aktuellen Benutzer vorbereiten. Das wird nicht mehr funktionieren. Ich muss auch viel Code schreiben, der gepflegt werden muss (Bereinigungsmethode für jedes Viewmodel). Der Ansatz, die alten Instanzen wegzuwerfen, scheint mir viel einfacher zu sein. – Joel
Dies ist laut MVVM Light Maintainer der empfohlene Ansatz. [SimpleIoc - Kann es jedes Mal eine neue Instanz bereitstellen?] (Http://stackoverflow.com/a/9350917/580951). Wenn das nicht zu Ihrer Architektur passt, ist es möglicherweise besser, zu einem anderen IOC zu wechseln. – Romoku