刚开始使用MVC,长期使用WebForms。
我不想用面向UI的属性来装饰我的实体,例如"显示名称"或者"必需",加上很多方法和属性比我在视图上公开的方法和属性更多。
所以我正在尝试使用ViewModels来包装,或者以其他方式与我系统中的实际实体进行交互。我不喜欢的是Controller如何知道查询存储库然后实例化ViewModel以包装它返回的实体。
控制器与ViewModels交互的最佳做法是什么,而不必知道它们如何持续存在?我看到的所有示例都直接与EntityFramework或其他ORM对话。
我在思考ViewModel类上的静态方法,它们采用IRepository引用和ID来加载和返回ViewModel。这有意义吗?
答案 0 :(得分:1)
使用DependencyInjection将您的存储库传递给您的控制器。
public HomeController
{
private readonly IHomeRepository repo;
public HomeController(IHomeRepository repository)
{
repo = repository;
}
}
然后在您的操作方法中,获取项目,并从这些对象创建ViewModel。
public ActionResult Index()
{
// IEnumerable models are bad, but this is just a quick demo.
var viewModels = repo.GetWidgets().Select(w => new WidgetModel(w));
return View("Index", viewModels);
}