2008-09-18 6 views
4

Windsor/Microkernel에 관해 읽은 것부터 이론적으로 코드가있는 xml 파일을 사용하여 할 수있는 모든 것을 할 수 있습니다. 사실 저는 - 잘못된 것이라면 저를 수정하십시오 - Windsor 레이어의 주요 공헌은 Microkernel이 이미 할 수있는 것들을위한 xml 구성을 추가하는 것 같습니다.Windsor Container : Code 대 Xml에 등록하기

그러나 요즘 코드에서 다소 복잡한 기능을 구현하는 방법을 찾는 데 어려움을 겪고 있습니다 (예 : how to assign a default constructor argument value). 이제 제작용 릴리스에서 xml을 사용할 예정이지만 테스트를 위해 코드에 구성 요소를 등록하고 있는데 문제가 많습니다. 이것은 문서의 불행한 상태와 xml 등록에 초점을 맞춘 유일한 기사로 인해 도움이되지 않습니다.

누구든지 코드에서 물건을 등록하는 방법을 나열하는 출처를 알고 있습니까? 캐롤 윈저/마이크로 커널의 비 xml 사용이있는 오픈 소스/샘플 프로젝트를 아는 사람이 있습니까?

답변

6

저는 오픈 소스 프로젝트 사용법을 배우는 가장 좋은 방법을 단위 테스트에서 항상 발견했습니다. Castle에는 유창한 인터페이스가있어서 코드에서 모든 것을 할 수 있습니다. WindsorDotNet2Tests 테스트 케이스에서 :

[Test] 
    public void ParentResolverIntercetorShouldNotAffectGenericComponentInterceptor() 
    { 
     WindsorContainer container = new WindsorContainer(); 
     container.AddComponent<MyInterceptor>(); 

     container.Register(
      Component.For<ISpecification>() 
       .ImplementedBy<MySpecification>() 
       .Interceptors(new InterceptorReference(typeof(MyInterceptor))) 
       .Anywhere 
      ); 
     container.AddComponent("repos", typeof(IRepository<>), typeof(TransientRepository<>)); 

     ISpecification specification = container.Resolve<ISpecification>(); 
     bool isProxy = specification.Repository.GetType().FullName.Contains("Proxy"); 
     Assert.IsFalse(isProxy); 
    } 

등을위한

은 체크 아웃하여 ComponentRegistrationTestCaseAllTypesTestCase

정말 사물과 이벤트를 단순화,이 나의 선호하는 옵션은 그 일을위한 DSL도 있습니다

입니다 쉽게 확장 할 수 있습니다. DSL은 Binsor라고 불리우며 여기에서 더 자세히 읽을 수 있습니다 : http://www.ayende.com/Blog/archive/7268.aspx 다시 한번, 정보를위한 가장 좋은 장소는 단위 테스트입니다. 이것은 무슨 수 binsor와의 코드 예입니다

for type in AllTypesBased of IController("Company.Web.Controller"): 
    component type 

그 두 라인은 지금까지 등록이 컨테이너에 IController 인터페이스를 상속 입력합니다 : D

+0

감사가 좋은 반응을 주셔서 감사를! 나는 그것을 파헤쳐 야 할 것이다. WindsorContaienr의. 등록 방법은 어디에서 오는가? 나는 내 인텔리 센스를 통해 그것을 보지 못한다. 확장 방법입니까? –

+0

와우 ... 캐슬 리포지토리가 다운되었습니다. "리포지토리가 비활성화되었습니다 (관리자에 의해)." –

관련 문제