我知道雷电原理的基本思想(一个对象进入,一个对象离开),但是我在asp.net mvc中没有看到它的任何现实示例。
它是雷电圆顶原理的好例子

  public ActionResult Index(Employee employee)
        {
             //some actions here
             return View(employeeViewModel);
        }


但是声明呢


Controller类永远不会
直接暴露于任何相关事物
到HttpContext


动作调用者应该是什么样子?您可以为此提供一些示例和单元测试吗?



来自http://codebetter.com/blogs/jeremy.miller/archive/2008/10/23/our-opinions-on-the-asp-net-mvc-introducing-the-thunderdome-principle.aspx

“雷电圆顶原理” –所有Controller方法都接受一个ViewModel对象(在某些情况下为零个对象),并返回一个ViewModel对象(一个对象进入,一个对象离开)。 Controller类永远不会直接暴露给与HttpContext相关的任何事物。就像看到人们试图编写模拟或存根该新IHttpContextWrapper接口的测试一样,这没有让我哭泣。同样,Controller方法也不返回ViewResult对象,并且通常与所有MVC基础结构分离。我们很早就采用了这种策略,以使控制器的机械测试变得更简单。

但是我想知道该怎么做?如何编写这样的控制器动作调用程序?因为通常我们必须模拟httpcontext

最佳答案

有一个示例,说明如何在Oxite rev2源代码的ASP.NET MVC中实现OMIOMO(雷电)动作调用程序。

特别是OxiteActionInvoker:
http://oxite.codeplex.com/SourceControl/changeset/view/31497#442766

在这里您可以看到OMIOMO控制器:
http://oxite.codeplex.com/SourceControl/changeset/view/31497#442745

同样令人感兴趣的是,Oxite团队能够做到这一点,以便您可以使用支持IoC的动作过滤器(相对于必须在动作上指定所有过滤器-可能是违反OCP的行为,因为这样该动作就必须知道所有可能的使用方式)。您可以在OxiteActionInvoker方法“ GetFilters”中看到此操作,在该方法中,它会击中FilterRegistry来加载该操作的所有已注册过滤器。

10-07 21:08