Есть ли достаточно простой способ заставить FxCop проверить, используются ли ViewBag, ViewData в приложении MVC.
Пользовательские правила FxCop для проверки атрибутов в приложении MVC
Ответы (1)
Самым простым подходом будет проверка экземпляров MemberBinding с именем «ViewBag» или «ViewData» (с префиксами get_
и set_
). Это может привести к большому количеству ложных срабатываний, поэтому следующим уровнем сложности/полноты будет проверка типа целевого объекта MemberBinding, чтобы определить, является ли он представлением или контроллером. например.:
private readonly string[] _forbiddenNames = new string[] { "get_ViewBag", "set_ViewBag", "get_ViewData", "set_ViewData" };
public override ProblemCollection Check(Member member)
{
var method = member as Method;
if (method != null)
{
this.Visit(method.Body);
}
return this.Problems;
}
public override void VisitMemberBinding(MemberBinding memberBinding)
{
base.VisitMemberBinding(memberBinding);
var memberName = memberBinding.BoundMember.Name.Name;
if (this._forbiddenNames.Contains(memberName))
{
this.Problems.Add(new Problem(this.GetResolution(memberBinding.BoundMember), memberBinding, memberName));
}
}
person
Nicole Calinoiu
schedule
05.06.2013
Привет, Николь. Код, объявленный в HomeController, public ActionResult Index() { ViewBag.Message = Добро пожаловать в ASP.NET MVC!; this.ViewData[temp] = Добро пожаловать; вернуть вид(); } Я попытался переопределить VisitMethodCall, чтобы получить доступ к экземпляру MemberBinding.. но заметил, что вызов Visitmethod не вызывается. Как просмотреть экземпляр MemberBinding и проверить ViewData. Есть ли какой-либо метод для анализа экземпляров MemberBinding
- person SCP; 06.06.2013
Переопределения Visit___ не будут вызываться, если вы не инициируете посещение в переопределении Check. Я добавил пример в свой ответ.
- person Nicole Calinoiu; 08.06.2013