필자는 종속성 반전 원칙을 따르고 구성된 종속성 주입 (DI) 컨테이너를 사용하는 MVC 4 웹 솔루션을 설계하는 방법을 연구했습니다. 유창하게 (즉, 컴파일 타임 타입 검사와 함께).컴파일 시간으로 구성된 종속성 반전 ASP.NET MVC 4 솔루션의 종속성 삽입
많은 예제들 ASP.NET MVC 4 Dependency Injection MVC 프레임 워크가 제공하는 진입 점에 DI를 구현하는 방법에 중점을 두었습니다. 결과적으로 계층화 된 접근법 (빨간색 화살표로 표시된 종속성)으로 끌리는 것을 느낍니다. 불행히도 상위 모듈이 저수준 모듈에 종속되는 기존 종속성 모델을 반복합니다. Dependency Inversion의 원칙에 따라 IService 인터페이스가 WebProject로 이동합니다. '지금 내가 할 수있는 (컨테이너를 부트 스트랩하는 방법의 문제로 날 떠나
: 가 CompositionRoot가 자신의 프로젝트로 이동 순환 참조를 방지하려면 : 불행하게도이 두 프로젝트 간의 순환 참조를 생성 직접 WebProject 내에서 그것을 참조하지 마십시오)?
약간의 도움으로 the best way to get the directory from which an assembly is executing에서 리플렉션을 통해 초기화 할 수 있습니다.
var assembly = System.Reflection.Assembly.LoadFile(Helper.AssemblyDirectory + "/DependencyInjectionProject.dll");
var type = assembly.GetType("DependencyInjectionProject.Bootstrapper");
IDependencyResolver resolver = (IDependencyResolver)type.GetMethod("Initialise").Invoke(null, null);
DependencyResolver.SetResolver(resolver);
건물을 쉽게 만들려면 DependencyInjectionProject의 빌드 대상을 WebProject bin 디렉토리로 설정했습니다. 나는 내 목표를 만났다. 거꾸로 된 종속성을 확인하고 컨테이너 구성을 검사 한 시간을 컴파일하지만 IIS Express에서 WebProject를 실행할 때 자주 발생하는 대상 충돌 때문에이 접근 방식에 만족하지 않습니다.
저는 이러한 요구 사항을 충족시키기위한 다른 경험과 접근법에 대해 매우 관심이 있습니다. 컴파일 시간 설정을 생략하고 텍스트 기반의 구성을 채택해야합니까? 내가 볼 수없는 순환 종속성의 함정을 피하는 레이어의 명확한 구조가 있습니까?
나는 Composition Root라는 용어를 사용하여 물을 muddying하고 있을지 모른다. 컨테이너 구성을 대체하면 내 의도가 더 잘 전달 될 수 있습니다. 여기서 설명하는 종속성은보다 일반적인 접근 방식을 따릅니다. 하나는 "Inverted"가 아닙니다. 자신의 계층에서 인터페이스를 분리하는 것을 고려했지만 동일한 순환 종속성 문제가 발생했습니다. – rtev
그게 사실이라면 유감입니다. 도울 수 없어요. 필자의 관점에서, 거꾸로 된 접근법은 아무런 유익을주지 못하며 (UI 수정 - 자유롭게) UI (UI -> SL -> DI Container -> UI)가 복잡해질 수 있습니다. 순환 종속성이며 서비스 로케이터를 사용하면 종속성을 숨기고 숨기기 만하면됩니다. – Fendy