'daki tüm örnekleri nasıl sıfırlanır MVVM Light framework kullanarak bir C# WPF Uygulaması yaptım. Uygulamam çalışma zamanı sırasında görünüm modülleri bulmak için ViewModelLocator
sınıfını kullanır. ViewModelLocator
, MVVM Light framework ile birlikte gelen SimpleIoc
sınıfının kullanımını sağlar.IOC Container
İşte benim senaryo: Kullanıcı günlükleri bir uygulamayı kullanabilir. Çıkışta, bir sonraki kullanıcıya temiz bir ortam sağlamak için tüm viewmodel örneklerini elden çıkarmak/sıfırlamak/yeniden oluşturmak istiyorum.
ViewModelLocator
sınıfında Cleanup()
yöntemini uygulamaya çalıştım ancak çalışmıyor. Çalışmıyorsa, (ikinci) kullanıcının daha önce giriş yapmış olan kullanıcıdan verileri gördüğü anlamına gelir.
ilk deneme:
public static void Cleanup()
{
SimpleIoc.Default.Reset();
}
ikinci deneyin:
public static void Cleanup()
{
SimpleIoc.Default.Unregister<LoginViewModel>();
SimpleIoc.Default.Unregister<TaskViewModel>();
SimpleIoc.Default.Register<LoginViewModel>();
SimpleIoc.Default.Register<TaskViewModel>();
}
üçüncü deneme (geçici bir çözüm istediğim ama öyle değil):
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();
}
i tüm sıfırlayabilirim nasıl benim ViewModelLocator
sınıfındaki örnekler? Gerekirse daha gelişmiş bir Ioc Container kullanmaya hazırım. Ile
Üçüncü yaklaşımın nesi yanlış? Nesneler tekrar kullanılamaz mı? – Romoku
Geçerli kullanıcı için bazı şeyler hazırlayan kurucularda bazı mantık var. Bu artık çalışmayacak. Ayrıca bakılması gereken çok fazla kod yazmam gerekiyor (her viewmodel için temizleme yöntemi). Eski örnekleri atma yaklaşımı benim için çok daha basit görünüyor. – Joel
MVVM Light sürdürücüsüne göre, bu önerilen yaklaşımdır. [SimpleIoc - gerekli her zaman yeni bir örnek sağlayabilir mi?] (Http://stackoverflow.com/a/9350917/580951). Bu, mimarinize uymuyorsa, başka bir IOC'ye geçmek daha iyi olabilir. – Romoku