ASP .NET MVC アプリケーションの Model クラスにコントローラー クラスの参照がないことを確認する必要があるカスタム コード分析チェックを作成しています。しかし、モデルクラスの参照のためにコントローラーをチェックする方法と同じことに関連するものを見つけることができません。
2 に答える
ビジター アプローチ ( http://binarycoder.net/fxcop/html/check_and_visit.html ) を使用してルールを作成する場合、VisitMemberBinding
メソッドをオーバーライドして、コントローラー型のメンバーがアクセスされているかどうかを確認できます (特定のターゲット タイプがコントローラーとしての資格があるかどうかを識別する方法)。
.NET 開発者向けツールNDependは、この種の静的解析チェックを記述するのに特に適しています (免責事項: 私は NDepend を開発するチームに属しています) 。
- ASP .NET MVC アプリケーションのモデル クラスにコントローラー クラスの参照がないことを確認する必要があるカスタム コード分析チェックを作成しています。
NDepend を使用すると、C# LINQ クエリを使用してカスタム コード ルールを記述できます。約200 の既定の 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 ルールを編集し、その結果をライブで閲覧する機能を備えています。ルール チェックをビルド プロセスに統合することもでき、ルール違反をレポートに表示できます。
- しかし、モデルクラスの参照のためにコントローラーをチェックする方法と同じことに関連するものを見つけることができません。
この要件がよくわかりません。コントローラー クラスが実際にモデル クラスを使用していることを確認するルールを書きたいということですか?