Кодовые контракты с новым MVC 3 ViewBag
public class HomeController : Controller
{
public ActionResult Index()
{
// Warning 19 CodeContracts: Possibly calling a method on a null reference 'Website.Controllers.HomeController.<Index>o__SiteContainer0.<>p__Site2.Target' HomeController.cs
if (ViewBag != null)
{
ViewBag.Message = "Be Immortal";
}
return View();
}
public ActionResult About()
{
return View();
}
}
Разрушая мой мозг, пытаясь понять, как выполнить [X] неявные ненулевые обязательства для ViewBag в MVC 3. Кто-нибудь придумал, как заставить контракты кода объединяться с новым динамическим типом ViewBag?
Я бы предпочел иметь возможность обернуть ViewBag в базовый контроллер как ViewBagSafe и т. Д.
Я понимаю, что на самом деле это не проблема проекта, так как ViewBag никогда не будет нулевым, но я бы хотел оставить контракты кода включенными с проверкой по умолчанию на ноль для будущих ошибок с моей стороны (и все же иметь возможность компилировать без предупреждений) так что я могу легко идентифицировать свою собственную кодировку, нарушающую контракт).
1 ответ
Я разыскал проблему. Это связано с логикой инициализации динамического поиска членов и статических полей кэширования, генерируемых компилятором C#. Я должен был научить cccheck об этом и добавить несколько контрактов к классам кэширования в System.Core.dll. В следующем выпуске больше не должно появляться этих предупреждений для участников с динамическим доступом. Спасибо, что подняли это.