簡體   English   中英

ASP.NET MVC以編程方式初始化Controller並調用操作

[英]ASP.NET MVC initialize Controller and call action programatically

我正在構建一個預定的作業控制器 - 這些作業將調用一個Controller和一個捕獲結果的Action 我寧願在后端發生所有這些,也不要涉及http調用。

它有點類似於單元測試 - 例如:

var controller = new TestController();
var result = controller.Index("TestParameter") as ViewResult;

問題在於此示例中控制器和操作不是動態的,是否有人知道如何初始化控制器並使用控制器名稱和操作作為字符串參數調用操作? 如 -

public ActionResult run(string controllerName, string actionName)
{
    var controller = new Controller(controllerName);
    var result = controller.action(actionName).("TestParameter") as ViewResult;
    return Content(result);
}

使用ControllerFactoryActionDescriptor動態執行操作:

public ActionResult Run(string controllerName, string actionName)
{
    // get the controller
    var ctrlFactory = ControllerBuilder.Current.GetControllerFactory();
    var ctrl = ctrlFactory.CreateController(this.Request.RequestContext, controllerName) as Controller;
    var ctrlContext = new ControllerContext(this.Request.RequestContext, ctrl);
    var ctrlDesc = new ReflectedControllerDescriptor(ctrl.GetType());

    // get the action
    var actionDesc = ctrlDesc.FindAction(ctrlContext, actionName);

    // execute
    var result = actionDesc.Execute(ctrlContext, new Dictionary<string, object>
    {
        { "parameterName", "TestParameter" }
    }) as ActionResult;

    // return the other action result as the current action result
    return result;
}

請參閱MSDN

我不確定你真正的問題在哪里 - 你想測試控制器/動作還是你想測試你的工作功能?

  1. 如果你需要測試控制器/動作 ,它將涉及HttpContext
  2. 如果您需要更好地測試作業功能,可以在服務/存儲庫層中將其分開,並且可以使用存儲庫模式進行測試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM