Насколько я понимаю, SimpleIoc использует метод GetInstance для извлечения экземпляра зарегистрированного класса.Если экземпляр не существует, он создаст его.Однако этот экземпляр кэшируется и всегда извлекается, что имитирует шаблон синглтона.
Я считаю, что нет необходимости хранить экземпляр ViewModel в памяти, если существует небольшая вероятность того, что этот ViewModel будетнужно дважды, поэтому я хотел бы создавать новый экземпляр каждый раз, когда это необходимо.Если у нас есть фабрика для ViewModels, у нас будет свойство, подобное этому:
public MyViewMOdel MyViewModel
{
get { return SimpleIoc.Default.GetInstance<MyViewModel>(); }
}
, в этом используется шаблон синглтона, что, я думаю, не является наилучшей практикой во всех случаях.Чтобы обойти эту проблему, я делаю это:
public MyViewModel MyViewModel
{
get { return new MyViewModel(SimpleIoc.Default.GetInstance<ISomeInterface>()); }
}
У этого есть недостаток, заключающийся в том, что если я когда-либо изменю конструктор для MyViewModel, мне нужно будет также обновить это свойство.Ничего страшного, но все же есть какая-то зависимость.
Как вы справляетесь с этим сценарием, и я что-то упускаю?и почему было решено не возвращать неиспользуемый экземпляр.
И еще один вопрос: в сеансе глубокого погружения MVVM Лоран использует метод GetInstance сразу после регистрации определенной ViewModel, чтобы, как он говорит,убедитесь, что в контейнере уже есть экземпляр этой ViewModel.Почему именно это необходимо?Если вы выбираете ViewModel через ViewModelLocator, вы создадите его при необходимости.Так почему я хочу, чтобы они были созданы заранее?