2

NDependのクラス ブラウザには、継承されたメソッドを表示するオプションがないようです。

たとえば、 RootModelから派生した何千もの単一ルートのModelオブジェクトがあるシナリオがあります。RootModelのみがSave()を定義します。SampleModel (:RootModel) がSave()を呼び出すすべてのインスタンスを見つけるためのクエリをどのように作成しますか?

SELECT METHODS WHERE IsUsing "SampleModel.Save()" ORDER BY DepthOfIsUsing

...拒否されました:有効なアセンブリ、名前空間、型、メソッド、またはフィールド名ではありません

これは最良の概算のようですが、正確ではありません。

SELECT METHODS WHERE IsUsing "SampleModel" AND IsUsing "RootModel.Save()" ORDER BY DepthOfIsUsing

これはかなり厳しい制限のようですね。回避策は何ですか?

4

1 に答える 1

1

NDepend の静的な観点からは、クラスはメソッドSampleModelを宣言しません。Save()これが、最初のクエリがコンパイルされない理由です。

2番目のクエリは、実際にあなたの場合に行うのに良いことです. これを正しく行うには、LINQ でコード クエリ (CQLinq 機能)を使用して、次のように書き換えます。

from m in Application.Types.Where(t => t.DeriveFrom("MyNamespace.RootModel"))
         .ChildMethods()
where m.IsUsing("MyNamespace.RootModel.Save()")
select new { m, m.ParentType }
于 2009-09-23T07:45:47.897 に答える