2009-12-28 2 views
2

Castle Windsor에서 유창한 인터페이스를 사용하고 싶었습니다. 이 기능은 .NET 2.0 용 "릴리스"바이너리에서는 사용할 수 없기 때문에 트렁크에서 컴파일되어 안정적으로보고됩니다. 난 그냥 컴파일 :윈저 유창한 등록 - 모든 유형의 어셈블리

  • Castle.Core.dll에게
  • Castle.DynamicProxy.dll
  • Castle.MicroKernel.dll
  • Castle.Windsor.dll

이것은해야합니다 모든 것을 내가 필요한 것을 위해 필요하다. 그러나 모든 것이 예상대로 작동하지 않는다. 내가 디버거로 코드를 강화

var container= new WindsorContainer(); 
foreach (var assembly in _assemblies) 
{ 
    container.Register(AllTypes.FromAssembly(assembly)); 
} 

: 나는 반복하고 다음 코드를 사용하여 각 어셈블리에 포함 된 모든 유형을로드하려고 조립 컬렉션이 있습니다. _assemblies에는 2 개의 어셈블리가 있습니다. 각 어셈블리에는 다양한 유형이 정의되어 있습니다. 루프는 오류없이 두 번 반복되지만 완료되면 container은 여전히 ​​비어 있습니다.

업데이트 : 약간의 설명. 최신 바이너리는 유창한 인터페이스를 가지고 있지만 .NET 3.5 프레임 워크를 대상으로합니다. .NET 2.0으로 작업하고 있습니다. .NET 2.0을 지원하는 최신 이진 릴리스는 RC3입니다.

+0

유창한 API는 바이너리에서 사용할 수 있습니다. 나는 그것을 사용하고있어 결코 윈저를 편집하지 않았다. –

+0

@Kenneth : http://using.castleproject.org/display/IoC/Fluent+Registration+API를 참조하십시오. –

답변

4

Register(AllTypes ... 구문은 시작일뿐입니다. 윈저에 등록하려는 내용을 알려줘야합니다. 예를 들어

모든 컨트롤러를 얻을 :

container.Register(AllTypes 
     .FromAssemblyContaining(representativeControllerType) 
     .BasedOn<Controller>() 
     .Configure(reg => reg 
      .LifeStyle.PerWebRequest)); 

여기에 이름을 모든 클래스는 '서비스'로 끝나는 협약에 따라 등록하는 또 다른 예이다 등록해야합니다

container.Register(AllTypes 
     .FromAssemblyContaining<ConfigurationService>() 
     .Where(t => t.Name.EndsWith("Service", StringComparison.Ordinal)) 
     .WithService.FirstInterface() 
     .Configure(reg => reg.LifeStyle.PerWebRequest)); 

당신이 만약 모두 유형을 등록하려면 항상 true를 반환하는 Where 절을 작성할 수 있습니다.

기본적으로 Windsor doesn't auto-resolve concrete types입니다.

유창 등록 API에 대한 자세한 내용은 read the documentation을 참조하십시오.