Как отразить явную реализацию интерфейса C # из стека вызовов?

Можно ли отразить явную реализацию интерфейса из стека вызовов? Я хочу использовать эту информацию для поиска атрибута в самом интерфейсе.

Учитывая этот код:

interface IFoo
{
    void Test();    
}

class Foo : IFoo
{
    void IFoo.Test() { Program.Trace(); }
}

class Program
{
    static void Main(string[] args)
    {
        IFoo f = new Foo();
        f.Test();
    }

    public static void Trace()
    {
        var method = new StackTrace(1, false).GetFrame(0).GetMethod();
        // method.???
    }
}

В частности, в Trace () я хотел бы получить доступ к typeof (IFoo) из метода .

В окне просмотра, если я смотрю на method.ToString () , он дает мне Void InterfaceReflection.IFoo.Test () (InterfaceReflection - это имя моей сборки.)

Как я могу получить оттуда typeof (IFoo) ? Должен ли я использовать поиск типа на основе имени из самой сборки, или есть Type IFoo , спрятанный где-то в MethodBase ?

ОБНОВЛЕНИЕ:

Вот окончательное решение , благодаря Kyte

public static void Trace()
{
    var method = new StackTrace(1, false).GetFrame(0).GetMethod();
    var parts = method.Name.Split('.');
    var iname = parts[parts.Length - 2];
    var itype = method.DeclaringType.GetInterface(iname);
}

itype будет иметь тип интерфейса для метода реализации. Это будет работать только с явными реализациями интерфейса, но это именно то, что мне нужно. Теперь я могу использовать itype для запроса атрибутов, прикрепленных к фактическому типу интерфейса.

Спасибо всем за помощь.

5
задан scobi 1 October 2010 в 18:13
поделиться