내가 용기
아니 그렇게하지에 대한 참조를 얻을 필요가있다. 귀하의 신청서 내에서 should never need to reference the container (또는 DependencyResolver
) 대신
사용 생성자 주입 :
public class HomeController : Controller
{
private readonly ITestService testService;
// constructor
public HomeController(ITestService testService)
{
this.testService = testService;
}
public ActionResult Index()
{
return View(this.testService);
}
}
당신이 단결의 MVC3 통합 패키지를 사용하고 있기 때문에, 당신은 아마 당신의 응용 프로그램의 시작 경로에 DependencyResolver
유니티 특정 등록. 즉 많은 다음과 같습니다
DependencyResolver.SetResolver(new UnityDependencyResolver(container));
당신은 유니티 컨테이너에 컨트롤러의 생성을 위임합니다, 사용자 정의 DependencyResolver
을 이런 짓을했는데 유니티 컨테이너가 생성자의 컨트롤러의의 depdencies을 주입 할 경우.
당신이 절대해서는 안되는 일은보기가 어떤 작업을하고 서비스에 종속되도록하는 것입니다. 뷰는 멍청해야하며 컨트롤러에서 가져온 데이터를 매핑하고 HTML (또는 JSON 등)으로 변환하는 것 이상을 수행하면 안됩니다.
즉, testService
을보기로 전달하지 마십시오. 보기 내에서 testService
을 호출하면 해당 논리가 숨기고보기가 더 복잡해지며 시스템을 테스트하기가 어려워집니다. ITestService
추상화를 사용하고 있기 때문에 코드를 테스트 할 수 있기를 원하지만 뷰 테스트는 쉽지 않습니다 (적어도 컨트롤러를 테스트 할 수있는만큼 쉽지는 않습니다).
컨트롤러가 testService
을 호출하고 뷰를 사용하는 데 필요한 데이터를 수집하게해야합니다. 해당 데이터를 단일 클래스, 뷰 모델로 결합하여보기에 전달하는 것보다 빠릅니다.