2015-12-10 68 views
1

我在製作ControllerFactory。在此課程中,我想要在方法CreateController中訪問可在所有控制器中訪問的TempData變量。在控制器外部使用TempData

public class ControllerFactory : IControllerFactory 
{ 
    public IController CreateController(RequestContext requestContext, string controllerName) 
    { 
     //TODO :IoC implementation or call comes here. 
     return null; 
    } 

    public void ReleaseController(IController controller) 
    { 
     var disposable = controller as IDisposable; 
     if (disposable != null) 
     { 
     disposable.Dispose(); 
     } 
    } 

    public IController CreateController(System.Web.Routing.RequestContext requestContext, string controllerName) 
    { 
     //HERE I WANT TO HAVE ACCESS TO THE TempData 
    } 

    public SessionStateBehavior GetControllerSessionBehavior(System.Web.Routing.RequestContext requestContext, string controllerName) 
    { 
     return SessionStateBehavior.Default; 
    } 
} 

注:之前的代碼時達到一個頁面就被稱爲控制器,該機能的研究CreateController目前INT這段代碼是下游。

任何想法如何在CreateController方法中訪問TempData

+1

我不認爲TempData的是什麼,你認爲它是完美的作品。 TempData是一個僅適用於一次讀取的臨時字典(在您訪問一次後它會自行刪除)。我很難在控制器工廠中找到TempData的任何有用用法,因爲這些數據將不再存在於控制器/視圖中。而且,更重要的是,如果用戶按下F5鍵,數據將會消失,因此控制器工廠不再需要重新渲染頁面。 TempData基本上僅用於短通知消息等,如果頁面刷新,則不需要重新呈現。 –

+0

我舉個例子,爲了更好的理解。如果TempaData [「object」]!= null我想構建controller1,如果不是,我想構建默認控制器。所以,爲此,我需要訪問ControllerFactory中的臨時數據。請注意,TempData [「object」]可以由任何控制器使用。 –

+0

好的,但是當你這樣做TempData [「object」]!= null時,它會刪除它,那是你想要的嗎? –

回答

1

在ASP.NET MVC的核心來源,他們這樣做

var tempDataDictionaryFactory = context.RequestServices.GetRequiredService<ITempDataDictionaryFactory>(); 
var tempDataDictionary = tempDataDictionaryFactory.GetTempData(context); 
if (tempDataDictionary.TryGetValue(MyClaims.Claim1, out object value)) 
{ 
    return (string)value; 
} 

其中上下文是HttpContext的

這對我來說