Кодовые контракты с новым MVC 3 ViewBag - PullRequest
3 голосов
/ 04 июля 2011
    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 Ответ

1 голос
/ 27 апреля 2013

Я разыскал проблему. Это связано с логикой инициализации динамического поиска членов и статических полей кэширования, генерируемых компилятором C #. Я должен был научить cccheck об этом и добавить некоторые контракты к классам кэширования в System.Core.dll. Следующий выпуск больше не должен выдавать эти предупреждения для участников с динамическим доступом. Спасибо, что подняли его.

...