Исходя из этого вопросаDependency Injection для действий контроллера MVC, использующих модель просмотра
MVC3 - Should I design my Model to be tightly coupled to my View?
о том, как это рекомендуется использовать модель представления для ваших взглядов и имеет контроллер заселить модель представления, я были опробованы Ninject.MVC и использовали некоторые примеры для шаблона репозитория для ввода требуемого репозитория для контроллера.
Как это
public RecipesController(IRepository<Member> memberRepository, IRepository<Course> courseRepository, IRepository<Cuisine> cuisineRepository, IRepository<Recipe> recipeRepository) {
this.memberRepository = memberRepository;
this.courseRepository = courseRepository;
this.cuisineRepository = cuisineRepository;
this.recipeRepository = recipeRepository;
}
Тогда я использовал MVC Строительные леса, чтобы увидеть, что действия выглядели как
public ActionResult Create() {
ViewBag.PossibleCuisines = cuisineRepository.All;
ViewBag.PossibleMembers = memberRepository.All;
ViewBag.PossibleCourses = courseRepository.All;
return View();
}
[HttpPost]
public ActionResult Create(Recipe recipe) {
if (ModelState.IsValid) {
recipeRepository.InsertOrUpdate(recipe);
recipeRepository.Save();
return RedirectToAction("Index");
} else {
ViewBag.PossibleMembers = memberRepository.All;
ViewBag.PossibleCourses = courseRepository.All;
ViewBag.PossibleCuisines = cuisineRepository.All;
return View();
}
}
Я с трудом понять, как подходить к действиям контроллера с помощью модели вида ,
Скажем, у меня есть RecipeViewModel вроде этого:
public class RecipeViewModel {
public Recipe Recipe { get; set; }
public SelectList AuthorList { get; set; }
public SelectList CourseList { get; set; }
public SelectList CuisineList { get; set; }
public RecipeViewModel(Recipe recipe) {
Recipe = recipe;
}
}
и это модель мой взгляд будет использовать. Я предполагаю, что действие Create() GET сначала создало бы эту модель представления и было бы необходимо создать новый объект рецепта для перехода к конструктору ViewModel? и списки выбора могут быть заполнены с помощью соответствующего репозитория, такого как cuisineRepository.All (но это похоже, что он будет дублироваться в каждом действии), а затем модель представления передается в представление.
Как работает ModelState.IsValid в действии Create() POST для этой модели представления?
Таким образом, мой контроллер теперь ожидает объект RecipeViewModel, который сам нуждается в объекте Рецепт.
Должны ли они использовать интерфейсы для них тоже и иметь ручку Ninject? это целесообразно?
Спасибо, что ответ положил меня на правильный путь. В частности, шаблон 3 здесь: http://geekswithblogs.net/michelotti/archive/2009/10/25/asp.net-mvc-view-model-patterns.aspx – Pricey
Не вызывает ли это «No parameterless constructor», определенный для этот объект ", когда MVC ModelBinder пытается развернуть экземпляр' RecipeViewModel' в действии POST Create? Я думал, вам понадобится настраиваемое связующее устройство: http://stackoverflow.com/a/24166483/71906 –