2009-05-17 3 views
6

성 윈저와 자동 등록을 사용하여 나는 피크() 메소드가 무엇을 알아낼 수없고 내가 어떤 문서를 찾을 수있는 사람이 내 인생에 들어Castle Windsor 유창한 등록 - Pick()는 무엇을합니까?

_container.Register(
    AllTypes.Pick().FromAssembly(Assembly.GetExecutingAssembly()) 
    .WithService.FirstInterface()); 

같은 일을 참조하십시오. 아무도 나에게 설명 할 수 있을까?

답변

9

Pick(IEnumerable<Type>)is a synonym forFrom(IEnumerable<Type>), 즉 등록 대상으로 지정된 타입을 선택한다.

AllTypes.Pick()is the same asAllTypes.Of<object>()이므로 모든 유형을 효과적으로 선택합니다.

AllTypes.Pick().FromAssembly(Assembly.GetExecutingAssembly())는 (당신이 다음 물론, 필터링 할 수 있습니다) 평소처럼

실행중인 어셈블리의 모든 유형을 선택할 자세한 내용은 fluent API wiki 및/또는 test case에서 살펴볼 것이다.

+1

Mausch - 유창한 인터프리에 대한 캐슬 문서 작성에 대해 생각해 보셨습니까? 당신이 대답하는 것과 같은 첫 번째 질문은 아닙니다. –

+0

나는 그것을 시도해 보겠다 –

2

컨테이너에 자동으로 등록되는 유형을 선택하기 위해이 유창한 API에서 시작점의 일종입니다. 모든 종류의로 끝나는 이름하여 MyAssembly에서 선택이 예에서

Container.Register(
     AllTypes.Pick() 
     .FromAssemblyNamed("MyAssembly") 
     .If(t => t.Name.EndsWith("ABC")) 
     .Configure(c => c.LifeStyle.Is(LifestyleType.Transient)) 
     .WithService.Select(i => typeof(I)) 
    ); 

는 "ABC는"예는 this question에서 오는 유형 I의 서비스로 과도 라이프 스타일 컨테이너에 추가됩니다.

이것은 내부 DSL 형식의 선언적 접근 방식입니다. 이러한 종류의 API를 사용하면 나중에 실행될 동작을 구성하는 데 메서드를 사용합니다. 이를 달성하기 위해, 메소드는 구성 단계를 안내하는 빌더에게 돌아가는 반면 실제 작업은 마지막에 수행됩니다.

+0

위의 예제에서 AllTypes.Pick(). FromAssemblyNamed (...)를 사용하는 대신 문제가 생겼다. (..). 더 짧고 더 표준화 된 AllTypes.FromAssemblyNamed (...). 여기서 (..) –