2012-11-09 2 views
1

경고 : 저는 윈저에 처음 온 사람입니다.캐슬 윈저 서비스 바인딩 어셈블리

여러 개의 프로젝트가있는 1 개의 솔루션이 있습니다. 나는 우리의 모든 인터페이스 ("Framework"로 명명 된)와 그 인터페이스에 대한 구체적인 구현을 유지하는 다른 것들을 포함하는 프로젝트를 가지고있다. 나는 윈저가 이것을 묶어서 다음과 같이 인터페이스를 해결하려고 시도하고있다.

다른 프로젝트 중 하나는 Order 클래스가 있고 프레임 워크 프로젝트에 정의 된 IOrder 클래스를 구현하는 주문이다. 두 프로젝트 사이에 참조가 있으며 컴파일됩니다.

이 난에 대한 설치 프로그램을 만든 실제 윈저 통화가 다른 프로젝트했다 : 나는 등의 윈저 컨테이너를

public class CoreInstaller : IWindsorInstaller 
    { 
    public void Install(IWindsorContainer container, IConfigurationStore store) 
    { 
     container.Register(
      AllTypes.FromAssemblyNamed("Framework"), 
      AllTypes.FromAssemblyNamed("Orders") 
     ); 
    } 
    } 

를 인스턴스화 :

new WindsorContainer().Install(new CoreInstaller()); 

것은 내가 해결하려고 할 때

Castle.MicroKernel.ComponentNotFoundException : IOrder, 그것은 실패의에 대한 어떤 구성 요소가 없습니다 이 서비스 프레임 워크를 지원합니다. 이베리아가 발견되었습니다

또한 설치 기능에서 프로젝트를 뒤집어서 Orders을로드하려고 시도했지만 동일한 오류가 발생합니다.

윈저 사용자가 저를 도와 줄 수 있습니까?

+0

는 참고로, "클래스"는 "AllTypes"에 funtionally 동일하지만 그것은 이루어집니다 무엇을 명확합니다. [추가 정보] (http://docs.castleproject.org/Windsor.Whats-New-In-Windsor-3.ashx#Added_Classes_and_Types_registration_API_entry_types_for_batch_registration_of_components_12) – TylerOhlsen

+0

이 사용법에주의하십시오. 모든 유형을 싱글 톤 (기본 라이프 스타일)으로 등록합니다. 스레딩 문제가있을 수 있습니다. – TylerOhlsen

답변

1

당신은 윈저에 모든 유형을 효과적으로 알렸지 만, 당신은 아직 그들과 어떻게해야할 지 말하지 않았습니다. 등록 할 유형과 등록 할 인터페이스를 필터링하지 않으려면 Pick() 메소드를 등록에 추가해야합니다. 예를 들어

...

container.Register(
    Classes.FromAssemblyNamed("Framework").Pick(), 
    Classes.FromAssemblyNamed("Orders").Pick() 
); 
+0

이것은 불쾌합니다. @ OnResolve의 코드는 의미가 있으며 작동하지 않는다고 생각합니다. 구현할 누군가를위한 이슈 트래커에 로그를 남기거나 더 나은 아직 풀 요청을 보내야합니다.) –

+0

디자인 결정 일 뿐이며 FromAssemblyDescriptor가 클래스를 직접 등록하지 않는 기술적 인 이유가있을 것입니다. 나는 이것이 분명하지 않고 Fluent API에서 더 잘 지명 될 수 있다는 것에 동의하지만, 그들은 그 이유가 확실하다고 확신한다. – TylerOhlsen

+0

잘 모르겠다. 그러나 나는 그것을하지 않는 좋은 이유를 생각할 수 없다. –

관련 문제