如何防止用户控件共享视图模型

本文关键字:视图 模型 共享 控件 何防止 用户 | 更新日期: 2023-09-27 17:49:46

让我试着解释一下我的问题。

我在ASP中使用MVVM模式。. NET Web Forms应用程序。

每个用户控件都有一个后台视图模型,我正在初始化它们使用:

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实例!

到目前为止,我一直使用每个请求初始化策略的视图模型接口。我正在考虑使其瞬态和缓存实例内的ViewBase(所以本质上在一个UserControl实例。)

这是最好的方法吗?我希望我把问题讲清楚了。

PS:国际奥委会。Resolve只是Unity的一个包装。

如何防止用户控件共享视图模型

如果我理解正确的话,这只是一个适当配置依赖容器的问题。您似乎以单例模式解决,该模式为每个Resolve<TViewModelInterface>查询产生相同的实例。可以选择在多个或多个其他模式中解析-例如,每个查询生成一个新实例。

欢呼,保罗