2017-03-17 3 views
-1

우리는 솔루션에 20 가지 자체 프로젝트가 있습니다. 각 프로젝트는 독립 실행 형 구성 요소이며 자체 Windsor 설치 프로그램이 있습니다. 이 구조로 Windsor 설치자가 커지고 관리하기 어렵고 부서지기 쉽다는 것을 알게되었습니다.중요하지 않은 프로젝트 종속성을 위해 권장되는 Windsor 아키텍처

우리의 솔루션에서 일부 과부하 프로젝트는 다른 소규모 프로젝트의 하위 집합에 따라 달라지며 일부 프로젝트는 다른 프로젝트에 종속됩니다.

구조의 도면 화살표 의존성을 나타내는 곳이, 유사 할 것이다 :

enter image description here

다이어그램의 각 항목의 이름에 거주하지 않는다. 그것들은 관리 성 및 재사용 우려로 분리 된 다른 프로젝트 일뿐입니다. 나는 Windor 설치에 볼 수 있습니다

두 가지 방법은 다음과 같습니다

  1. 각 구성 요소가 종속성을 설치합니다. 이 예에서 API의 설치 프로그램은 Component A와 Component B를 설치합니다. 마찬가지로 Component A의 설치 관리자는 Module A와 Module B를 설치하고 Component B의 설치 관리자는 Module B와 Module C를 설치합니다.

  2. 최상위 프로젝트는 솔루션의 모든 종속성을 설치합니다. 이 예에서 API 설치 프로그램은 Component A와 B와 세 가지 모듈을 모두 설치합니다.

제 방식의 아래 측 번 이상 설치 될 수있는 각각의 설치 각 등록 Component.For<X>.OnlyNewServices()를 사용해야한다는 것이다. 이는 길고 잊기 쉽기 때문에 응용 프로그램 증가 및 구성 요소 재사용을 허용하기 위해 모든 단일 등록에 실제로 적용해야합니다.

두 번째 접근 방식의 단점은 프로젝트가 알지 못하는 구성 요소에 대한 지식이 필요하며 캡슐화가 중단된다는 것입니다.

질문 :

  1. 구성 요소가 여러 번 등록 할 수 있도록 기본 동작을 설정하는 윈저에있는 방법이 있나요?

  2. 다른 방법으로 종속성 (예 : 하위 컨테이너)을 위해 권장되는 Windsor 아키텍처가 있습니까?

+0

이 질문을 너무 광범위하게 생각하는 사람은 tl; dr version이 "등록 충돌없이 윈저에서 모듈을 개발할 때 권장되는 접근 방식"이라고 말합니다. – nullPainter

+1

응용 프로그램은 구성 루트가 있어야합니다. 프로젝트가 아닙니다 : http://blog.ploeh.dk/2011/07/28/CompositionRoot/ – Steven

+0

Visual Studio 프로젝트/어셈블리를 말합니다. 내 예제에서 각 '모듈'과 '구성 요소'는 C# 클래스 라이브러리입니다. 귀하의 링크가 어떻게 관련되어 있는지 모르겠습니다. 필자는 응용 프로그램의 시작점 (API 프로젝트)에 종속성뿐만 아니라 종속성의 종속성을 설치하는 모 놀리 식 Windsor 설치 관리자를 요구하는 것을 매우 꺼립니다. Mark가 제안한 것이 그러한 것이지 나는 모른다. 그러나 그렇다면 어떤 규모의 프로젝트에서도 비현실적 인 것처럼 보인다. – nullPainter

답변

0

Windsor의 기본 제공 어셈블리 스캐닝을 사용하여이 문제를 우아하게 해결했습니다. 각 프로젝트는 이제 프로젝트에 정의 된 구성 요소 만 설치하고 다른 설치 프로그램은 명시 적으로 설치하지 않으며 다른 구성 요소에서 구성 요소를 열심히 확인하지 않습니다.

이 API 프로젝트는 포함되어 우리 관리하기 어려운 설치에 대한 이유의

var container = new WindsorContainer(); 
container.Install(FromAssembly.InThisApplication()); 

일부는 일부 설치 프로그램이 종속 구성 요소의 조기 해결을하고 있다고합니다. 이는 안티 패턴이며 설치 프로그램 주문을 시행합니다. 이 필요성을 제거하면 응용 프로그램 전체의 설치가 간단 해집니다.