2013-01-01 1 views
2

저는 Castle Windsor를 배우면서 AOP를 사용하여 몇 가지 문제를 해결하려고 시도했으며이를 차단하기 위해 차단 기능을 사용하려고했습니다.Castle Windsor 요격으로 구성 요소 대신 등록 된 클래스에

다음을 수행하여 단일 구성 요소로 작동시키는 방법을 알아 냈습니다. 클래스를 등록 할 때 내가 여기

container.Register(Classes.FromThisAssembly() 
       .BasedOn<IController>()     
       .LifestyleTransient()); 

했을 인터셉터이에 사용할 수있을 나타나지 않는

container.Register(Component.For<IInterceptor>() 
       .ImplementedBy<BankServiceLogger>() 
       .Named("BankServiceInteceptor")); 

      container.Register(Component.For<IBankService>() 
       .ImplementedBy<BankService>() 
       .Interceptors(InterceptorReference.ForKey("BankServiceInteceptor")).Anywhere 
       .LifestyleTransient()); 

내 문제는 컨트롤러로입니다.

여러 클래스를 등록 할 때 가로채는 방법이 있습니까? 아니면이를 수행하기 위해 각 구성 요소를 개별적으로 등록해야합니까?

BasedOnDescriptorConfigure 방법은 그러나 난 그냥 Configure는 당신이 InterceptorGroupAnywhere 속성을 호출 할 수없는 Action<ComponentRegistration>을하도록 설계되어 있기 때문에 실현이 능력 (뿐만 아니라 많은 다른 것들을 구성 할 수있는 기능)을 제공
+0

아직 AOP가 죽거나 잊지 않았습니까? – paulsm4

+1

@ paulsm4 예, Castle AOP는 약 5 년 전에 사망했습니다. 그러나이 질문은 Castle DynamicPro의 AOP 기능을 내부적으로 사용하는 Castle Windsor의 AOP 기능에 대한 것입니다. –

답변

2

그래서 인터셉터는 구성 요소 등록에 적용되지 않습니다. 아래는 내가 해결할 수있는 최선의 해결 방법입니다.

container.Register(Component.For<MyInterceptor>()); 
container.Register(Classes.FromThisAssembly() 
    .BasedOn<IController>().WithService.FromInterface() 
    .LifestyleTransient() 
    //.Configure(c => c.Interceptors(InterceptorReference.ForType<MyInterceptor>()).Anywhere) 
    .Configure(delegate(ComponentRegistration c) { var x = c.Interceptors(InterceptorReference.ForType<MyInterceptor>()).Anywhere; }) 
); 
+0

감사합니다. – Josh

관련 문제