2013-02-05 55 views
1

說我的看法有一個隱藏的輸入。現在我希望這個隱藏的內容可以根據包含它的任何請求填充到我的控制器的公共屬性中。我怎樣才能讓asp.net MVC迴歸財產注入?

我可以這樣做嗎?

最終結果將是我的基礎控制器上的一個屬性,該屬性已填充爲包含匹配命名項目的任何請求。

public class ControllerBase 
{ 
    public bool Debug{ get; set; } 
} 

public class MyController : ControllerBase 
{ 
    public ActionResult Action1() 
    { 
     return View(base.Debug ? "in debug mode" : "not in debug mode"); 
    } 
} 

另一件似乎可能的事情是使用構造函數注入的相同想法。

基本上我想我可以說,請求中的可用數據調整DI容器,以便在控制器被調用之前設置好一些信息,從而實現一個步驟?

回答

2

可能一個相對簡單的方法是創建一個ActionFilter並將其應用於ControllerBase。假設您已將其設置爲DebugModeAttribute。

public class DebugModeAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     if (filterContext.RequestContext.HttpContext.Request.Form["hidden_var"] == "true") 
     { 
      var controller = filterContext.Controller as ControllerBase; 
      if (controller != null) 
       controller.Debug = true; 
     } 
    } 
} 

它應該完成工作,但它可能不是最乾淨的外觀解決方案。不管解決方案如何,如果您的DI容器不爲每個請求創建新的實例,您必須小心。修改HttpContext.Items並在基礎上添加一個getter可以更安全,它將讀出存儲在那裏的值。

+0

感謝您的答案 - 我學到了一些東西.. –