这个代码违反了什么符合标准?

时间:2011-07-27 13:18:30

标签: c# asp.net-mvc-3 design-patterns

拥有私有ViewModel对象有什么问题,以便我的所有控制器操作都可以访问它?

  • 我正在使用EF4,MVC3,DBContext,DBsets。

    public class MyController {
    
    private MyViewModel _myViewModel;
    
    public ActionResult Index(MyViewModel myViewModel){ <-- There is a model Binder making this work
    
    _myViewModel = myViewModel;
    
    return _myViewModel;
    }
    
    }
    

2 个答案:

答案 0 :(得分:3)

因为每次调用控制器操作时,都会获得控制器的不同实例。因此,您在先前操作中存储在此控制器的实例字段中的任何内容都将在后续操作中丢失。这就是为什么在ASP.NET MVC中你有会话,应用程序状态,TempData,Cookies,Cache等概念的原因。你可以命名它。

答案 1 :(得分:1)

首先,通过使ViewModel成为控制器的成员,您实际上限制了在多线程环境中可以执行的操作。如果在同一个控制器上调用了多个动作,则最终可能会出现竞争条件,以确定每个视图使用哪个传入的视图模型。

编辑:每次都会得到一个不同的控制器实例,所以这不会发生。但是,对于使用私有成员的其他类来说,仍然需要牢记这一点