I have made an C# WPF Application using the MVVM Light framework. My Application uses the ViewModelLocator
class to locate the viewmodels during runtime. The ViewModelLocator
makes usage of the SimpleIoc
class which also comes with the MVVM Light framework.
Here is my scenario: The user logs in an can use my application. On logout, i want to dispose/reset/recreate all viewmodel instances to provide a clean environment to the next user.
I tried to implement the Cleanup()
method in the ViewModelLocator
class but it is not working.
Not working means that the (second) user sees the data from the user who was logged in before.
first try:
public static void Cleanup()
{
SimpleIoc.Default.Reset();
}
second try:
public static void Cleanup()
{
SimpleIoc.Default.Unregister<LoginViewModel>();
SimpleIoc.Default.Unregister<TaskViewModel>();
SimpleIoc.Default.Register<LoginViewModel>();
SimpleIoc.Default.Register<TaskViewModel>();
}
third try (not what i want but it is a workaround):
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();
}
How do i reset all instances in my ViewModelLocator
class? I'm willing to use a more advanced Ioc Container if necessary.