2014-07-24 54 views
0

我想要绘制出使用Roslyn的大型解决方案中发生的所有DI。我的目标是获得一棵我可以形象化的树。我设法解析语法树来查找所有类和接口及其方法,以及它们定义的项目,但现在我发现自己陷入了困境。使用Roslyn映射DI依赖关系

用Roslyn做这种分析的正确方法是什么?我是否在每种方法中都使用方法调用,寻找Autofac Register调用?这似乎既非常尴尬又容易出错。我希望语义API在这里有用,但我找不到解决这个问题的好方法。

任何指针在正确的方向将不胜感激。

+1

我不确定你是什么意思的“行走”的方法调用;你能澄清吗?如果您想要一个翻译单元中所有方法调用的列表,将其表示为查询非常简单。 –

回答

1

如果您想查找对特定方法的所有调用,最简单的方法是使用工作区图层SymbolFinder类型。

首先查找ISymbol的兴趣点,通过使用Compilation.GetTypeByMetadataName获取该类型,然后通过GetMembers("methodName")获取该方法。然后,您可以拨打SymbolFinder.FindReferencesAsync查找所有来电者。

+0

我想我真正的问题是这是否是识别DI依赖关系的正确方法?在autofac的情况下,一切最终都是一个Register <>()。作为<>()调用,我应该寻找那些映射的东西吗? – XeroxDucati

+0

这似乎是合理的,但我对Autofac或您的目标不够了解, –