我想要绘制出使用Roslyn的大型解决方案中发生的所有DI。我的目标是获得一棵我可以形象化的树。我设法解析语法树来查找所有类和接口及其方法,以及它们定义的项目,但现在我发现自己陷入了困境。使用Roslyn映射DI依赖关系
用Roslyn做这种分析的正确方法是什么?我是否在每种方法中都使用方法调用,寻找Autofac Register调用?这似乎既非常尴尬又容易出错。我希望语义API在这里有用,但我找不到解决这个问题的好方法。
任何指针在正确的方向将不胜感激。
我想要绘制出使用Roslyn的大型解决方案中发生的所有DI。我的目标是获得一棵我可以形象化的树。我设法解析语法树来查找所有类和接口及其方法,以及它们定义的项目,但现在我发现自己陷入了困境。使用Roslyn映射DI依赖关系
用Roslyn做这种分析的正确方法是什么?我是否在每种方法中都使用方法调用,寻找Autofac Register调用?这似乎既非常尴尬又容易出错。我希望语义API在这里有用,但我找不到解决这个问题的好方法。
任何指针在正确的方向将不胜感激。
如果您想查找对特定方法的所有调用,最简单的方法是使用工作区图层SymbolFinder
类型。
首先查找ISymbol
的兴趣点,通过使用Compilation.GetTypeByMetadataName
获取该类型,然后通过GetMembers("methodName")
获取该方法。然后,您可以拨打SymbolFinder.FindReferencesAsync
查找所有来电者。
我想我真正的问题是这是否是识别DI依赖关系的正确方法?在autofac的情况下,一切最终都是一个Register <>()。作为<>()调用,我应该寻找那些映射的东西吗? – XeroxDucati
这似乎是合理的,但我对Autofac或您的目标不够了解, –
我不确定你是什么意思的“行走”的方法调用;你能澄清吗?如果您想要一个翻译单元中所有方法调用的列表,将其表示为查询非常简单。 –