它花了一些小把戲,但是要感謝this SO question,我只能截取接口方法。
考慮:
public abstract class AbstractClass ...
public interface IBar ...
public class MyClass : AbstractClass, IBar ...
這個攔截器應該做你想要什麼:
public class BarInterceptor : IInterceptor
{
public void Intercept(IInvocation invocation)
{
var map = invocation.TargetType.GetInterfaceMap(typeof(IBar));
var index = Array.IndexOf(map.TargetMethods, invocation.Method);
if (index == -1)
{
// not an interface method
invocation.Proceed();
return;
}
Console.WriteLine("Intercepting {0}", invocation.Method.Name);
invocation.Proceed();
}
}
我的測試代碼爲:
var mc = new MyClass();
var gen = new ProxyGenerator();
var proxy = gen.CreateClassProxyWithTarget(typeof(MyClass), mc, new BarInterceptor());
((AbstractClass) proxy).GetString();
((AbstractClass) proxy).GetInt();
((IBar) proxy).GetItem();
待辦事項抽象類和接口有多個方法? – pscuderi
不,但它們不提供接口方法。 –