여러 인터페이스를 구현하는 클래스가 있습니다. XML을 통해 이러한 인터페이스를 등록하고 싶습니다. 필자가 발견 한 것은 새로운 Fluent Interface의 문서입니다. 이 옵션은 XML을 통해 지원됩니까? 이 기능을 추가 할 때 어떤 영향이 있습니까?Castle-Windsor는 XML 구성을 통해 ForwardedTypes를 지원합니까?
9
A
답변
10
[업데이트] 이제 Windsor 2.1 이상에서 가능합니다. 구문 here에 대한 설명서를 참조하십시오.
이 기능은 .. 현재로 XML 인터프리터에서 아직 구현되지 않은, 그러나 그것은 시설을 통해 지원을 추가하는 것은 어렵지 않다 결석에 다른 기능을 추가하고자 할 때 (분명히이 기술은 유용 기존 구성 파서).
그래서 우선 우리는 핸들러가 유형에 대해 생성 될 때 감지하는 기능을 추가하고 기존 핸들러를 가리 키도록 동시에 전달 된 서비스 중 하나를 등록합니다 :
public class HandlerForwardingFacility : AbstractFacility
{
IConversionManager conversionManager;
protected override void Init()
{
conversionManager = (IConversionManager)Kernel.GetSubSystem(SubSystemConstants.ConversionManagerKey);
Kernel.HandlerRegistered += new HandlerDelegate(Kernel_HandlerRegistered);
}
void Kernel_HandlerRegistered(IHandler handler, ref bool stateChanged)
{
if (handler is ForwardingHandler) return;
var model = handler.ComponentModel;
if (model.Configuration == null) return;
var forward = model.Configuration.Children["forward"];
if (forward == null) return;
foreach (var service in forward.Children)
{
Type forwardedType = (Type)conversionManager.PerformConversion(service, typeof (Type));
Kernel.RegisterHandlerForwarding(forwardedType, model.Name);
}
}
}
이제
public interface IDog
{
void Bark();
}
public interface IDuck
{
void Quack();
}
public class Mutant : IDog, IDuck
{
public void Bark()
{
Console.WriteLine("Bark");
}
public void Quack()
{
Console.WriteLine("Quack");
}
}
것은 실제로 구성 : IDuck 및 IDog - 그리고 물론 우리는이 예를 들어 나는 두 개의 별도의 서비스를 지원하는 돌연변이 오리/개 구성 요소를 가지고거야, 코드에서이 사용을해야 용기 :
<castle>
<facilities>
<facility id="facility.handlerForwarding" type="Example.Facilities.HandlerForwardingFacility, Example" />
</facilities>
<components>
<component id="mutant" service="Example.IDog, Example" type="Example.Mutant, Example">
<forward>
<service>Example.IDuck, Example</service>
</forward>
</component>
</components>
</castle>
그리고 지금 우리는 행복과 같은 테스트를 실행할 수 있습니다 :이 도움이
WindsorContainer container = new WindsorContainer(new XmlInterpreter());
var dog = container.Resolve<IDog>();
var duck = container.Resolve<IDuck>();
Assert.AreSame(dog, duck);
희망을.
관련 문제
- 1. log4net은 xml 구성을 재정의 하시겠습니까?
- 2. iPhone이 XML-RPC를 지원합니까?
- 3. XML 기반 구성을 주석으로 변환
- 4. XML AUTO는 내가하려는 일을 지원합니까?
- 5. XML 구성을 사용하여 HTML 파일 생성
- 6. Zend_Tool을 사용하여 XML 애플리케이션 구성을 생성하려면 어떻게해야합니까?
- 7. XML 구성을 사용하여 메뉴 버튼을 변경하십시오.
- 8. 구성을 통해 참조 횟수를 구현하는 것이 괜찮습니까?
- 9. 은 뚜렷한 구성을 위해 tomcat에서 구성을 수행해야합니까?
- 10. open xml sdk 2.0은 Linux 플랫폼을 지원합니까?
- 11. 실버 라이트는 mms를 통해 스트리밍을 지원합니까?
- 12. AutoMapper는 ReadOnlyCollections를 지원합니까?
- 13. Apache는 구성을 a로 읽는 구성을 commons합니다. .B
- 14. Java 클래스 경로에 XML 구성을 포함시키는 것이 좋습니다.
- 15. 이 간단한 xml 구성을 XmlSerializer 클래스로 deserialize하려면 어떻게해야합니까?
- 16. JPA 대신 xml 구성을 사용하여 열 이름의 @AttributeOverride Anotations
- 17. php app-xml 또는 ini 또는 db 구성을 저장하는 방법
- 18. 업데이트를 사용하여 재배포 할 때 xml 구성을 유지하는 방법은 무엇입니까?
- 19. Rails 3 Engine-Gem 또한 Mixin을 통해 DRY 구성을 공유하려고합니다.
- 20. Kohana의 라우트 구성을 통해 추가 매개 변수 전달
- 21. 구성을 통해 persistence.xml 속성을 재정의 할 수 있습니까?
- 22. 사용자 스크립트를 통해 Xcode에서 활성 빌드 구성을 설정하십시오.
- 23. 코드에서 WCF 구성을 제한하십시오.
- 24. linq을 통해 XML 구문 분석
- 25. Java 코드를 통해 XML 검색
- 26. 동적으로 내부 구성을 저장합니다.
- 27. WCF 구성을 통한 가장
- 28. Mac 10.3.9는 libxml2를 지원합니까?
- 29. 허드슨 구성을 복원하는 방법은 무엇입니까?
- 30. Oracle은 JDBC를 통해 서버 측 스크롤 가능 커서를 지원합니까?
그냥 알다시피, 이제 프레임 워크에 구워집니다. –
@Krzysztof :이 기능이 필요하며 휠을 재발 명하지 않을 것입니다. 불행히도, 이것에 관해서는 아무것도 찾을 수 없습니다. Xml 구성을 통해 기본 제공 유형 전달과 관련된 설명서 또는 링크가 있습니까? –
johny g - 문서에 있습니다. http://www.castleproject.org/container/documentation/v21/manual/windsorconfigref.html –