윈저 컨테이너:코드와 XML에 항목 등록
-
01-07-2019 - |
문제
Windsor/Microkernel에 대해 읽은 내용에 따르면 이론상으로는 코드가 포함된 xml 파일을 사용하여 수행할 수 있는 모든 작업을 수행할 수 있습니다.사실 - 제가 틀렸다면 정정해 주십시오 - Windsor 계층의 주요 기여는 Microkernel이 이미 수행할 수 있는 작업에 대해 xml 구성을 추가하는 것 같습니다.
하지만 최근에는 코드에서 약간 더 복잡한 기능을 구현하는 방법을 찾는 데 어려움을 겪고 있습니다(예: 기본 생성자 인수 값을 할당하는 방법).이제 프로덕션 릴리스에서 xml을 사용하는 동안 테스트를 위해 코드에 구성 요소를 등록하고 있는데 이것이 상당히 문제가 되고 있습니다.이것은 문서의 불행한 상태와 내가 찾을 수 있는 유일한 기사가 xml 등록에 초점을 맞추고 있다는 사실로 인해 도움이 되지 않습니다.
코드에 항목을 등록하는 방법을 나열하는 소스를 아는 사람이 있습니까(가급적 XML과 동일)?그 존재를 제외하고, Castle Windsor/Microkernel의 XML이 아닌 중요한 사용이 있는 오픈 소스/샘플 프로젝트에 대해 아는 사람이 있습니까?
해결책
저는 항상 단위 테스트가 오픈 소스 프로젝트 사용 방법을 배우는 가장 좋은 방법이라는 것을 알았습니다.Castle에는 코드로 모든 작업을 수행할 수 있는 유연한 인터페이스가 있습니다.로부터 WindsorDotNet2테스트 테스트 케이스:
[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);
}
자세한 내용은 구성요소등록테스트케이스 그리고 모든 유형테스트 케이스
이를 수행하기 위한 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