Позвольте мне попытаться объяснить мою проблему.
Я использую шаблон MVVM в приложении ASP.NET Web Forms.
Каждый пользовательский контроль имеет свою поддержку ViewModel, и я инициализирую их, используя:
public TViewModelInterface ViewModel {
get {
return IoC.Resolve<TViewModelInterface>();
}
}
Этот код присутствует внутри класса ViewBase, объявленного так:
public abstract class ViewBase<TUserControl, TViewInterface, TViewModelInterface> : UserControl, IView
where TUserControl : UserControl
where TViewInterface : class, IView
where TViewModelInterface : class, IViewModel {
Теперь все хорошо, пока UserControl не используется в нескольких местах на одной странице ASPX.
Когда это будет сделано, бац! Оба экземпляра UserControl используют один и тот же экземпляр TViewModelInterface!
До сих пор я использовал стратегию инициализации по запросу для интерфейсов View Model. Я подумываю сделать его временным и кэшировать экземпляр внутри ViewBase (по сути, внутри экземпляра UserControl.)
Это лучший подход? Надеюсь, я прояснил свой вопрос.
PS: IoC.Resolve - это просто оболочка над Unity.