2011-02-09 6 views
4

Ninject 차단 확장 프로그램을 가지고 놀고 있습니다. Ian Davis's blog post은 인터페이스가 아닌 실제 서비스 유형에 따라 인터셉트가 항상 있음을 나타냅니다. Foo.DoSomethingvirtual 경우 Ninject 차단 확장 프로그램의 인터셉트 인터페이스 메소드

Kernel.InterceptBefore<IFoo>(f => f.DoSomething(), 
    i => Console.WriteLine("before")); 

그리고 물론

은 다음 코드 조각에만 작동합니다 :

Kernel.InterceptBefore<Foo>(f => f.DoSomething(), 
    i => Console.WriteLine("before")); 

이는 것 같아 IFoo는 인터페이스이기 때문에 예를 들어, 다음 코드는 영향을주지 않습니다 Aspect-Oriented 프로그래밍의 경우에는 상당히 눈부실 정도입니다. 인터페이스에 프로그래밍하는 것에 대해 꽤 양심적 이었기 때문에 다양한 서비스를 조롱하기 위해 조롱 프레임 워크를 사용할 수는 있었지만 실제 메소드 구현의 대부분은 가상이 아닙니다. 조롱하는 프레임 워크가 내가 묻는 것을 수행하는 방법으로 IFoo을 생성 할 수 있다면, Ninject가 할 수 있어야하는 것처럼 보입니다.

  1. 어떤 이유로 Ninject에 차단 당신이 방법을 인터페이스로 결합 할 수 없다 않는가요 :

    그래서 제 질문은 두 가지가 추측?

  2. Ninject 바인딩을 모든 인터페이스 메소드에서 특정 차단 조치를 수행 할 수있는 동적 "래퍼"클래스에 쉽게 바인드 할 수 있습니까? 그렇다면 실제 구현으로 호출을 전달하십시오.

답변

5

나는 이것에 약간의 스파이킹을했는데, 그 행동을 가로 채기 연장에 넣는 것이 가능할 것으로 보인다. 그러나 가까운 장래에 2.2 릴리스를 계획하고 있으므로 약간의 환자가되어야합니다. 나는 변화에 몹시 싫어하므로 2.4에 추가 할 것을 계획했다. 또한 스파이크는 생산적이지 않습니다. 모든 현재 단위 테스트가 실행 중입니다. 그러나이 기능으로 추가해야 할 새로운 기능이 많이 있습니다. 당신이 원한다면 나는 당신에게 패치를 보낼 수 있지만 나는 당신에게 어떤 지원도하지 않을 것이며, 현재 버그가 없다고 보장 할 것이다.

+0

감사합니다. Remo. 나는 이것에 대해 대단히 참을성이있다. 우리 프로젝트에서 중요한 것은이 기능에 달려 있지 않습니다. Ninject로 수행해온 위대한 모든 노력과 사용자 커뮤니티에 신속하고 일관된 응답을 보내 주시면 감사하겠습니다. 이 일에서 너를 돕기 위해 내가 할 수있는 일이 있으면 알려줘. – StriplingWarrior

+1

아직 구현되지 않았습니까? – mac10688