SimpleIoc - может ли он предоставлять новый экземпляр каждый раз, когда требуется?

Насколько я понимаю, 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, вы создадите его всякий раз, когда потребуется. Так зачем мне создавать их заранее?

19
задан Goran 18 February 2012 в 15:02
поделиться