代码与新MVC 3 ViewBag签订合同

时间:2011-07-04 13:24:08

标签: asp.net-mvc-3 razor code-contracts microsoft-contracts

    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();
    }
}

在我的脑中试图弄清楚如何满足MVC 3中ViewBag的[X]隐式非空义务。有没有人想出一种方法来使用新的动态ViewBag类型进行代码契约?

我最好能够将ViewBag作为ViewBagSafe等包装在基本控制器中。

我确实意识到这对项目来说并不是一个问题,因为ViewBag永远不会为null但是我想保留代码合同,使用默认的空值检查以便将来的滑动(我仍然能够编译时没有警告,以便我可以轻松识别我自己的合同破解编码。

1 个答案:

答案 0 :(得分:1)

我追查了这个问题。它与动态成员查找的初始化逻辑和C#编译器发出的静态缓存字段有关。我不得不教这些cccheck并将一些合同添加到System.Core.dll中的缓存类。下一个版本不应再对动态访问成员发出这些警告。谢谢你提出来。