少しの手間がかかりましたが、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();
ドゥAbstractClassとのインタフェースは、重複した方法がありますか? – pscuderi
いいえ、インタフェースメソッドはあらかじめわかっていません。 –