현재 Autofac-1.4.5.676, autofac contrib 및 castle DynamicProxy2를 사용하여 약간의 실험을하고 있습니다. 목표는 특정 인터페이스의 특정 메서드 호출을 가로 챌 수있는 대단위 프로파일 러를 만드는 것입니다.autofac 및 dynamicproxy2를 사용하여 선택적으로 가로 채기 방법
문제 : 선택 품목과 완전히 다른 모든 작업을 수행하고 있습니다. 내가 틀릴 수도 있지만 IProxyGenerationHook 구현을 사용하여 인터셉터와 결혼해야한다고 생각합니다. 그러나이를 수행하는 방법을 알 수는 없습니다.
public interface ISomeSystemToMonitor
{
void Update(); // this is the one I want to profile
void SomeOtherMethodWeDontCareAboutProfiling();
}
이제 때
&이 프로파일 차단 할 인터페이스 (() 방법 업데이트를 프로파일에 대해 내가에만 관심이 있습니다) :
내 코드는 다음과 같이 보입니다 컨테이너에 시스템을 등록 할 때 다음을 수행합니다.
// Register interceptor gubbins
builder.RegisterModule(new FlexibleInterceptionModule());
builder.Register<PerformanceInterceptor>();
// Register systems (just one in this example)
builder.Register<AudioSystem>()
.As<ISomeSystemToMonitor>)
.InterceptedBy(typeof(PerformanceInterceptor));
모두 ISomeSystemToMonit 또는 컨테이너에서 꺼내 진 인스턴스는 Update 메서드뿐만 아니라 모든 메서드를 가로 챌 것이라는 사실 외에도 가로 채어지고 프로파일 링됩니다.
이제 어떻게 확장하여 Update() 이외의 모든 메서드를 제외 할 수 있습니까? 앞에서 말했듯이 "ProfileInterceptor의 경우이 IProxyHookGenerator 구현을 사용하십시오."컨테이너에 알리는 방법을 이해하지 못합니다.
모두 감사합니다. 또한 지금 당장 autofac2.x로 업그레이드 할 수 없습니다. 인터셉터가 생성 될 때 CreateInterfaceProxyWithTarget
호출로 전달되어야합니다.
답변 해 주셔서 감사합니다. 이것은 코드 프로파일 링을위한 것이므로 가능한 한 가볍게하고 싶습니다. 따라서 요격기의 체크를 수행하고 유연성을 확인하는 성능을 확인해야합니다. –
AutofacContrib.DynamicProxy2 소스를 잡고 수동으로 후크를 추가 할 수 있습니다. 그렇게하면 최소한 인터셉터에서 필터링을 통한 비교를 할 수 있습니다. –
그래, 내가 그걸 줄거야 :) –