5

나는 이것에 아주 새롭다, 그래서 저와 곰.의존성 주입

서비스/저장소/EF4 패턴을 사용하는 MVC 앱이 있고 Ninject를 사용하려고합니다. 나는 컨트롤러에 대해 작업하고있다. 그들은 생성자에 서비스가 주입되어 있지만, 서비스는 생성자에 리포지토리가 주입되어 있으며 이것을 처리 할 위치가 확실하지 않다.

각 레이어가 아래 레이어에 대해서만 알고 있도록하기 위해 노력하고 있습니다. 맞습니까? 그렇다면, MVC 응용 프로그램은 서비스 레이어 알고, 및 서비스 계층은 내가 바인딩을 만드는 오전 내 Ninject에 모듈에 따라서 등 저장소 계층에 대해 알고, 내가 말할 수 없습니다

Bind(Of IRepository(Of Category)).To(Of EFRepository(Of Category)) 

어디서 주사를 맞습니까?

+0

http://jeffreypalermo.com/blog/the-onion-architecture-part-1/ –

+0

관련 : http://stackoverflow.com/questions/4570750/dependency-injection-turtles-all-the- way-down –

+0

Duplicate : http://stackoverflow.com/questions/1475575/where-should-i-do-dependency-injection-with-ninject-2 –

답변

7

귀하의 질문에 대한 의견은 실제로 유용한 정보를 제공합니다.

나는 보통 당신이 무슨 말을하는지 달성하기 위해이 같은 일을 정리 - 의존성 주입에 직접 적용되는 그것의 부분 :

    내가 하나 개의 프로젝트를 가지고 내 비주얼 스튜디오 솔루션을 설정
  • /조립 애플리케이션의 레이어 당 이 방법을 사용하면 한 레이어의 프로젝트에서 다른 레이어로 호출 할 수 있도록 참조를 설정해야합니다. 예를 들어, MVC 앱에서 서비스 레이어로 참조를 설정하지만 MVC 앱에서 저장소 레이어로 설정하면 MVC 앱이 저장소 레이어에 직접 액세스하지 못하게됩니다.
  • 각 레이어의 프로젝트 내에서 프로젝트의 최상위 네임 스페이스에 사용해야하는 인터페이스와 클래스를 넣고 인터페이스 및 하위 네임 스페이스 (일반적으로 "Impl"이라고 함)에 숨겨져 있어야하는 다른 클래스의 실제 구현을 넣습니다. 또는 그런 것; 이 클래스들은 또한 실수로 다른 레이어가 아니라 어셈블리 (레이어) 내에서만 사용할 수 있도록 "내부"로 선언됩니다.
  • 각 프로젝트/레이어는 공용 인터페이스를 내부 구현 클래스에 바인딩하는 하나의 NInject 모듈을 선언합니다.
  • 응용 프로그램의 구성 루트 (Mark Seeman의 링크 : Where should I do Injection with Ninject 2+ (and how do I arrange my Modules?) 참조)에서 이러한 모듈을로드하는 커널을 만듭니다.
  • 실제 주입은 대부분 생성자 주입으로 수행됩니다. 즉, 클래스 자체가 주입에 대해 실제로 알지 못합니다. (모호한 생성자가있는 경우 가끔 [[주입]] 속성을 사용해야합니다.
+0

그래서 각 프로젝트에는 ** Ninject 모듈이 있어야합니다. 커플 링을 느슨하게 유지하기 위해 다음 레이어의 바인딩을 구성합니까? 그런 다음 앱의 루트 (Global.asax)가 이들 모두를 사용하여 커널을 구성합니다. MVC 앱이 RepositoryNinjectModule에 대해 어떻게 알 수 있을지 조금 혼란 스럽습니다. – Sam

관련 문제