View模型的构造函数或Property注入?

Wil*_*ler 2 c# asp.net-mvc dependency-injection viewmodel asp.net-mvc-viewmodel

我最近IList<T>在一个存储库方法调用中发布了一个关于Ninject没有注入的问题,该调用返回IList<T>一个视图模型构造函数,给出的答案是注入某种类型的存储库等.

但是,我已经读过将某个存储库等注入到视图模型的构造函数中的某个地方被认为是反模式(不记得是出于什么原因).

Dave Thieben先生说,如果我按照MVC或MVP中的方式使用ViewModel模式,那么视图模型应该没有注入其构造函数的依赖项,而是应该通过Controller内的Property Injection来填充它.主持人.

遵循规则"完全注入该类需要履行其职责",ViewModel所需的所有内容都是基于托管内容的用户对象列表.那么为什么不通过Constructor Injection直接注入,而不是通过Property Injection注入?

Chr*_*att 8

简单而明确地,视图模型应该不知道您的存储库; 换句话说,它不应该依赖于您的存储库,无论您如何注入它.

您的存储库应该注入您的控制器,您的控制器应该设置视图模型的属性,执行任何必要的查询.关键是这里的演员需要是你的控制器,而不是你的视图模型.视图模型是一个被动类,只是为了保存视图所需的数据,而控制器的实际工作是将所有内容连接起来,发出查询等,以便根据需要获取数据.