처음 IoC를 배우지 만 표준 ASP.NET MVC 컨트롤러에서 뷰 모델 및 모델 바인딩과 함께 작동하는 방법을 알아낼 수 없습니다. 필자는 단단히 결합 된 저장소와 뷰 모델을 사용하는 기본 컨트롤러를 가지고 있다고 가정 해 보겠습니다.ASP.NET MVC에서 viewmodel을 사용하는 DI
public class Sample
{
[HttpGet]
public ActionResult Index()
{
var repo = new SampleRepository();
var model = new SampleViewModel();
model.SampleItems = repo.Get();
return View(model);
}
[HttpPost]
public ActionResult Index(SampleViewModel model)
{
...
}
}
지금 나는 종속 클래스를의에서 내가 저장소를 주입 할 수 있도록 DI 느슨하게 커플이 컨트롤러를 사용하여 생성자 주입을 통해 내 문제가
public class Sample
{
private readonly ISampleRepository _sampleRepository;
private readonly ISampleViewModel _sampleViewModel;
public Sample(
ISampleRepository sampleRepository,
ISampleViewModel sampleViewModel)
{
_sampleRepository = sampleRepository;
_sampleViewModel = sampleViewModel;
}
[HttpGet]
public ActionResult Index()
{
_sampleViewModel.SampleItems = _sampleRepository.Get()
return View(_sampleViewModel);
}
[HttpPost]
public ActionResult Index(SampleViewModel model)
{
...
}
}
, 내가 지금 주입하고 있습니다을에서의 ViewModel 할 HttpPost Action은 모델 바인딩을 수행하기 위해 구체적인 SampleViewModel을 필요로합니까?
내가 어떻게 작동하는지 오해 했습니까? 컨트롤러에서 뷰 모델을 느슨하게 결합해야합니까? 아니면 모델 바인더가 제대로 작동하려면 꼭 필요한 커플 링입니까? 사람들이 컨트롤러에 뷰 모델을 반환하기 위해 서비스 레이어를 사용하는 코드를 보았습니다. 또한 사용자 정의 모델 바인더를 작성할 수도 있다는 것을 알고 있습니다. 그러나 여기에서 내가하고 싶은 것에 대한 막대한 과잉 짜증처럼 보입니다. 내가 한 것은 GET 및 POST 뷰를 통해 사용할 수있는 기본 뷰 모델에 주입하는 방법입니다.
model-view-controller 태그는 패턴에 대한 질문입니다. ASP.NET-MVC 구현을위한 특정 태그가 있습니다. –
왜 뷰 모델을 주입하고 있습니까 (모델이 아닌 서비스를 주입합니까)? –
태깅 첫 번째 게시물에 대한 사과 : ( – JoshRees