我正在编写自定义代码分析检查,其中我需要检查ASP .NET MVC应用程序中的Model类是否没有控制器类的引用。但我无法找到与如何检查我的控制器以供模型类参考相关的任何内容。
答案 0 :(得分:0)
如果您使用访问者方法(http://binarycoder.net/fxcop/html/check_and_visit.html)来创建规则,则可以覆盖VisitMemberBinding
方法以验证是否正在访问控制器类型的任何成员(假设您有办法确定特定目标类型是否有资格作为控制器。)
答案 1 :(得分:0)
.NET开发人员的工具NDepend特别适合编写这种静态分析检查(免责声明:我属于开发NDepend的团队)
NDepend允许通过C#LINQ查询编写自定义代码规则。提供200 default code rules周围。这种LINQ语法可以直接编写您要求的规则:
warnif count > 0
let modelClasses = Application.Namespaces.WithNameLike("Model").ChildTypes()
let controllerClasses = Application.Namespaces.WithNameLike("Controller").ChildTypes()
from modelClass in modelClasses.UsingAny(controllerClasses)
select new { modelClass,
controllerClassesUsed = modelClass.TypesUsed.Intersect(controllerClasses)
}
显然,调整此规则很容易,也许您想通过不同的方式定义 modelClasses 或 controllerClasses (从某个类派生,实现某个接口...)。
NDepend可以集成到VS 2012,2010,2008中,并具有编辑LINQ规则的功能,并可以实时浏览其结果。规则检查也可以集成到您的构建过程中,rules violation ca be shown in a report。
我不确定理解这个要求,你的意思是你想写一个规则来检查控制器类确实在使用模型类吗?