2014-07-09 3 views
0

내 솔루션에는 프리젠 테이션 (winforms 프로젝트), 도메인 (클래스 lib) 및 지속성 (클래스 lib)의 세 가지 레이어가 있습니다. 종속성 삽입을 구현하여 이들을 분리하려고합니다. 내 응용 프로그램 루트가 내 프레젠테이션 계층에 있습니다. DI 컨테이너 (이 경우 단일성)를 참조해야하는 유일한 시간은 내 응용 프로그램 루트에 있다는 것을 알고 있습니다. 그렇지 않으면 간단히 내 DI 컨테이너에 대한 의존성이있는 모든 곳에서 클래스 종속성을 대체 할 것입니다. 보다 나은).의존성 삽입 구현

이러한 기초 개념을 염두에두고 나는 구체적인 구현 방법을 고심하고 있습니다. 아마도 내 응용 프로그램 루트는 자체의 별도 프로젝트, 즉 콘솔 응용 프로그램에 있어야합니다. 그런 다음 IPresentation, IDomain 및 IPersistence를 해당 생성자에 나열하는 첫 번째 'overallApplication'클래스를 해결할 수 있습니다. 나는 (실제 구현이 등록되었다고 가정 할 때) 단일성 프레임 워크가 모든 하위 종속성을 재귀 적으로 풀 것이라고 이해한다.

귀하의 경험에 비추어 볼 때 이것이 현명한 접근 방법 이었는지 조언 해 줄 수 있습니까? 디커플링의 개념과 중요성을 이해하고 DI를 어떻게 개념적으로 높은 수준에서 해결할 수 있는지 이해하지만 여러 레이어가 포함 된 실제 응용 솔루션 (VS에서 별도의 프로젝트로 편성 됨)에 모든 것을 하나로 묶기 위해 고심하고 있습니다.

적절한 구현 사례에 대한 도움이나 조언을 주시면 감사하겠습니다.

+0

관련 항목 : https://stackoverflow.com/questions/9501604/ioc-di-why-do-i-have-to-reference-all-layers-assemblies-in-entry-application – Steven

답변

0

도움이되기를 바라는 당신을위한 몇 가지 생각. 귀하의 질문에 걸쳐

당신은 다음과 같은 성명을 :

"정말 디커플링의 개념과 중요성을 이해하고,이 ... DI 해결 방법"나는 평가할 것

우선이다 DI! = IoC Container (예 : Unity)에 대한 이해.

IoC 컨테이너는 기존 DI 구조의 결과 인 상용구 코드를 제거하는 데 사용됩니다. 그렇기 때문에 나는 Unity/First/Without없이 리팩터링을 제안합니다. 그런 다음 다시 돌아가 Unity를 추가하여 코드를 줄이십시오.

이렇게 :
-1. 수동 Ctor, Property, Method, Service Locator 주입 방법을 통해 응용 프로그램 Di를 작성하십시오.
-2. 이 설정이 완료되면

-3과 같은 것을 볼 수 있습니다. 코드에서 같은 것을 일단 그럼 당신은 모든 재미를 주입하는 유니티를 사용할 수없는 생산 예 동안

public View() {} 
Controller Controller {get;set;} //<- Unity auto builds & populates this for you with all the "new" items normally found in your constructor (or wherever). 

, 그것은 리팩토링 몇 가지 단계의 아이디어를 줄 것이다. 단결로 곧장 가면 말 앞에서 카트가 놓이게됩니다.

+0

나는 내가 '정말로 이해하고있다'고 말할 때 나 자신을 크게 벌리고있었습니다 :) 감사합니다. 의존성 주입과 IoC 컨테이너 사이의 구분을 실제로 볼 때 유용합니다. –

+0

Service Locator는 최후의 수단이므로 여러 종속성을 줄이는 것이 가장 좋습니다. –