Я сделал приложение WPF с C#, используя MVVM Light framework. В моем приложении используется класс ViewModelLocator
, чтобы найти режимы просмотра во время выполнения. В ViewModelLocator
используется класс SimpleIoc
, который также поставляется с MVVM Light framework.Как сбросить все экземпляры в контейнере IOC
Это мой сценарий: Пользователь может войти в систему, используя мое приложение. При выходе из системы я хочу удалить/восстановить/воссоздать все экземпляры viewmodel, чтобы обеспечить чистую среду для следующего пользователя.
Я попытался реализовать метод Cleanup()
в классе ViewModelLocator
, но он не работает. Не работает означает, что (второй) пользователь видит данные от пользователя, который ранее регистрировался.
первой попытки:
public static void Cleanup()
{
SimpleIoc.Default.Reset();
}
вторая попытка:
public static void Cleanup()
{
SimpleIoc.Default.Unregister<LoginViewModel>();
SimpleIoc.Default.Unregister<TaskViewModel>();
SimpleIoc.Default.Register<LoginViewModel>();
SimpleIoc.Default.Register<TaskViewModel>();
}
третья попытка (не то, что я хочу, но это обходной путь):
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();
}
Как сбросить я все экземпляров в моем классе ViewModelLocator
? В случае необходимости я готов использовать более продвинутый контейнер Ioc.
Что случилось с третьим подходом? Можно ли повторно использовать объекты? – Romoku
У меня есть некоторая логика в моих конструкторах, которые готовят некоторые вещи для текущего пользователя. Это не сработает. Мне также нужно написать много кода, который необходимо сохранить (метод очистки для каждой модели просмотра). Подход, чтобы выбросить старые примеры, кажется мне гораздо более понятным. – Joel
В соответствии с поддержкой MVVM Light это рекомендуемый подход. [SimpleIoc - может ли он предоставлять новый экземпляр каждый раз?] (Http://stackoverflow.com/a/9350917/580951). Если это не соответствует вашей архитектуре, тогда лучше переключиться на другую МОК. – Romoku