Учитывая, что у нас есть много классов, которые реализуют интерфейсы в решении для ряда проектов.
Есть ли способ определить самые длинные цепочки вызовов в решении с помощью статического анализа?
Например:
class Foo : IFoo
{
private readonly IBar _bar;
Foo(IBar bar)
{
_bar = bar;
}
public void Start()
{
_bar.Start();
}
}
class Bar : IBar
{
private readonly IFoo2 _foo2;
Bar(IFoo2 foo2)
{
_foo2 = foo2;
}
public void Start()
{
_foo2.Start();
}
}
class Foo2 : IFoo2
{
public void Start()
{
Console.WriteLine("Foo2 started");
}
}
Где экземпляр Foo вызывает экземпляр Bar через интерфейс IBar, а экземпляр Bar вызывает экземпляр Foo2 через интерфейс IFoo2. Итак:
var foo = new Foo(new Bar(new (Foo2)));
foo.Start();
Самый длинный стек вызовов будет 3 уровня (так как в этом примере только один), который будет 3:
- Foo.Start
- Bar.Start
- Foo2.Start