우리는 솔루션에 20 가지 자체 프로젝트가 있습니다. 각 프로젝트는 독립 실행 형 구성 요소이며 자체 Windsor 설치 프로그램이 있습니다. 이 구조로 Windsor 설치자가 커지고 관리하기 어렵고 부서지기 쉽다는 것을 알게되었습니다.중요하지 않은 프로젝트 종속성을 위해 권장되는 Windsor 아키텍처
우리의 솔루션에서 일부 과부하 프로젝트는 다른 소규모 프로젝트의 하위 집합에 따라 달라지며 일부 프로젝트는 다른 프로젝트에 종속됩니다.
구조의 도면 화살표 의존성을 나타내는 곳이, 유사 할 것이다 :
다이어그램의 각 항목의 이름에 거주하지 않는다. 그것들은 관리 성 및 재사용 우려로 분리 된 다른 프로젝트 일뿐입니다. 나는 Windor 설치에 볼 수 있습니다두 가지 방법은 다음과 같습니다
각 구성 요소가 종속성을 설치합니다. 이 예에서 API의 설치 프로그램은 Component A와 Component B를 설치합니다. 마찬가지로 Component A의 설치 관리자는 Module A와 Module B를 설치하고 Component B의 설치 관리자는 Module B와 Module C를 설치합니다.
최상위 프로젝트는 솔루션의 모든 종속성을 설치합니다. 이 예에서 API 설치 프로그램은 Component A와 B와 세 가지 모듈을 모두 설치합니다.
제 방식의 아래 측 는 번 이상 설치 될 수있는 각각의 설치 각 등록 Component.For<X>.OnlyNewServices()
를 사용해야한다는 것이다. 이는 길고 잊기 쉽기 때문에 응용 프로그램 증가 및 구성 요소 재사용을 허용하기 위해 모든 단일 등록에 실제로 적용해야합니다.
두 번째 접근 방식의 단점은 프로젝트가 알지 못하는 구성 요소에 대한 지식이 필요하며 캡슐화가 중단된다는 것입니다.
질문 :
구성 요소가 여러 번 등록 할 수 있도록 기본 동작을 설정하는 윈저에있는 방법이 있나요?
다른 방법으로 종속성 (예 : 하위 컨테이너)을 위해 권장되는 Windsor 아키텍처가 있습니까?
이 질문을 너무 광범위하게 생각하는 사람은 tl; dr version이 "등록 충돌없이 윈저에서 모듈을 개발할 때 권장되는 접근 방식"이라고 말합니다. – nullPainter
응용 프로그램은 구성 루트가 있어야합니다. 프로젝트가 아닙니다 : http://blog.ploeh.dk/2011/07/28/CompositionRoot/ – Steven
Visual Studio 프로젝트/어셈블리를 말합니다. 내 예제에서 각 '모듈'과 '구성 요소'는 C# 클래스 라이브러리입니다. 귀하의 링크가 어떻게 관련되어 있는지 모르겠습니다. 필자는 응용 프로그램의 시작점 (API 프로젝트)에 종속성뿐만 아니라 종속성의 종속성을 설치하는 모 놀리 식 Windsor 설치 관리자를 요구하는 것을 매우 꺼립니다. Mark가 제안한 것이 그러한 것이지 나는 모른다. 그러나 그렇다면 어떤 규모의 프로젝트에서도 비현실적 인 것처럼 보인다. – nullPainter