Unity をインターセプトに使用しています。私は多くのインターフェースを持っているので、VirtualMethodInterceptor
. 私の行動では、呼び出されたメソッドが特定のタイプのインターフェイスで(特別な属性で)宣言された場合にのみ反応したいと思います。私は MethodBase.DeclaringType が私の問題を解決すると思っていましたが、私が望んでいたものとは異なる動作をします。実装タイプを返します。
メソッドは複数のインターフェイスで宣言できるため、理にかなっていることに同意できますが、それらのリストを簡単に取得する方法が必要です。残念ながらまだ見つかっていません。
私の問題を示す小さなサンプル
public interface ISample
{
void Do();
}
public class Sample : ISample
{
public void Do()
{
}
}
class Program
{
static void Main(string[] args)
{
var m = typeof(Sample).GetMethod("Do") as MethodBase;
Console.WriteLine(m.DeclaringType.Name); // Prints "Sample"
}
}
1つの厄介な解決策:
var interfaces = from i in input.MethodBase.DeclaringType.GetInterfaces()
where i.GetCustomAttributes(typeof(CustomAttribute), true).Length > 0
where i.GetMethod(input.MethodBase.Name, input.MethodBase.GetParameters().Select(p=>p.ParameterType).ToArray()) != null
select i;