2

NDepend的类浏览器似乎没有显示继承方法的选项。

例如,我们有一个场景,我们有数千个从RootModel 继承的单根模型对象。只有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()方法。这就是第一个查询无法编译的原因。

在您的情况下,第二个查询确实是一件好事。为了让它正确,您可以使用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 回答