Как предотвратить совместное использование viewmodel для пользовательских контролей? - PullRequest
0 голосов
/ 09 апреля 2011

Позвольте мне попытаться объяснить мою проблему.

Я использую шаблон 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.

1 Ответ

0 голосов
/ 09 апреля 2011

Если я правильно понимаю, это только вопрос правильной настройки вашего контейнера зависимостей. Похоже, вы решаете проблему в виде одноэлементного режима, который выдает один и тот же экземпляр для каждого Resolve<TViewModelInterface> запроса. Например, есть возможность разрешить в многотонном режиме или множестве других модификаций, получая новый экземпляр для запроса.

Приветствия

Пол

...