在控制器外部使用TempData

时间:2015-12-10 17:04:31

标签: c# asp.net-mvc controller

我正在制作ControllerFactory。在本课程中,我希望在方法CreateController中访问所有控制器中都可访问的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会出现在此代码中。

任何想法我如何在TempData方法中访问CreateController

1 个答案:

答案 0 :(得分:1)

在ASP.NET Core MVC源代码中,他们执行此操作

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

上下文是HttpContext

哪种方式适合我