c#复杂';查找用法';脚本

c#复杂';查找用法';脚本,c#,visual-studio,resharper,C#,Visual Studio,Resharper,假设我的项目中有以下类: 基本接口 public interface IInvoker { void Invoke(); } 实现接口的两个类 public interface IInvoker { void Invoke(); } 第一个: public class Invoker1 : IInvoker { public void Invoke() { Console.WriteLine("Invoker #1"); } } 第

假设我的项目中有以下类:

  • 基本接口

    public interface IInvoker
    {
        void Invoke();
    }
    
  • 实现接口的两个类

    public interface IInvoker
    {
        void Invoke();
    }
    
    第一个:

    public class Invoker1 : IInvoker
    {
        public void Invoke()
        {
            Console.WriteLine("Invoker #1");
        }
    }
    
    第二点:

    public class Invoker2 : IInvoker
    {
        public void Invoke()
        {
            Console.WriteLine("Invoker #2");
        }
    }
    
  • 此外,我还有一个类,它有一个接口类型的字段:

    public class InvokerContainer
    {
        private readonly IInvoker target;
    
        public InvokerContainer(IInvoker invoker)
        {
            this.target = invoker;
        }
    
        public void InvokeTarget()
        {
            this.target.Invoke();
        }
    }
    
  • 客户端代码如下所示:

    class Program
    {
        static void Main(string[] args)
        {
            InvokingMethod1(new Invoker1());
            InvokingMethod2(new Invoker2());
            new InvokerContainer(new Invoker1()).InvokeTarget();
            Console.ReadKey();
        }
    
        private static void InvokingMethod1(IInvoker invoker)
        {
            invoker.Invoke();
        }
    
        private static void InvokingMethod2(IInvoker invoker)
        {
            invoker.Invoke();
        }
    }
    
    所以我的问题是:有没有办法找到所有使用
    Invoker1#Invoke
    的地方,以及可能的调用层次结构是什么? 根据上述代码,此方法应产生以下结果:

  • 调用方法:
    程序#调用方法1
    。堆栈跟踪:
    Program#Main
    ->
    Program#InvokingMethod1
    第17行
  • 调用方法:
    InvokerContainer#InvokeTarget
    。堆栈跟踪:
    Program#Main
    ->
    InvokerContainer#InvokeTarget
    第14行

  • 得到resharper@T.S.我已经有了它,但“Find Usages Advanced”和“Search with pattern”都没有帮到我。也许你知道我应该用Resharper做些什么才能得到想要的结果?@DmitrySenin,你不能也正确地这样做,因为根据坚实的原则(特别是Liskov替换)。接口允许按约定进行设计,它应该与类实现无关。直接使用类的接口方法(而不是通过接口)是代码臭味的开始。如果你看到的是别人造成的混乱,那么祝你好运:)@sbp,我不会违反Liskov替换原则:)我正在寻找一种工具,可以帮助分析上述代码deeplyReSharper功能“传入调用”可以显示层次结构,但它不会过滤接口调用