2014-07-24 1 views
0

Roslyn을 사용하여 대규모 솔루션에서 발생하는 모든 DI를 매핑하려고합니다. 내 목표는 내가 시각화 할 수있는 나무를 얻는 것입니다. 필자는 구문 트리를 구문 분석하여 모든 클래스와 인터페이스 및 해당 메서드와 정의 된 프로젝트를 찾을 수 있었지만 이제는 자신이 갇혀있는 것으로 나타났습니다.DI 의존성을 Roslyn으로 매핑

Roslyn과 같은 종류의 분석을 수행하는 올바른 방법은 무엇입니까? Autofac Register 호출을 찾는 모든 메소드 호출마다 모든 메소드 호출을 수행합니까? 그것은 어색하고 오류가 발생하기 쉬운 것 같습니다. 의미 론적 API가 여기에 사용되기를 기대했지만, 그 중 하나를 해결할 좋은 방법을 찾을 수 없습니다.

올바른 방향으로 어떤 포인터를 주시면 감사하겠습니다.

+1

메서드 호출을 "걷는"것이 무슨 뜻인지 잘 모르겠습니다. 분명히 해줄 수 있니? 번역 단위에서 모든 메소드 호출 목록을 원한다면이를 쿼리로 표현하는 것은 매우 간단합니다. –

답변

1

특정 방법에 대한 모든 호출을 찾으려면 가장 쉬운 방법은 작업 공간 레이어 SymbolFinder 유형을 사용하는 것입니다.

먼저 Compilation.GetTypeByMetadataName을 사용하여 유형을 얻은 다음 GetMembers("methodName")을 사용하여 해당 메소드를 가져와 ISymbol을 찾습니다. 그런 다음 SymbolFinder.FindReferencesAsync으로 전화하여 모든 발신자를 찾을 수 있습니다.

+0

내 진짜 질문은 DI 의존성을 식별하는 올바른 방법인지 여부입니다. autofac의 경우 모든 것이 궁극적으로 Register <>()입니다. <>() 호출에서 물건을 매핑 할 사람을 찾아야합니까? – XeroxDucati

+0

합리적인 것처럼 보이지만 Autofac이나 목표에 대해 충분히 알지 못합니다. –