【问题标题】:Access Controller Context/ TempData from business objects从业务对象访问控制器上下文/临时数据
【发布时间】:2011-03-05 15:09:00
【问题描述】:

我正在尝试构建一个可以交换的会话/临时数据提供程序。默认提供程序将在 asp.net mvc 之上工作,它需要从业务对象类访问 .net mvc TempData。我知道临时数据可通过控制器上下文获得,但我似乎无法找到它是否通过 HttpContext 或其他方式公开。我真的不想将控制器上下文作为参数传递,因为这会稀释我的接口定义,因为只有基于 asp.net 的会话提供程序需要这个,其他(使用 NoSQL DB 等)不关心控制器上下文。

为了进一步澄清,在此处添加更多代码。我的 ISession 界面看起来像这样。当此代码投入生产时,会话/临时数据预计将使用 NoSql db 工作。但我也喜欢在 asp.net mvc session/tempdata 之上为我的开发测试等提供另一个实现。

公共接口ISession

{
    T GetTempData<T>(string key);

    void PutTempData<T>(string key, T value);

    T GetSessiondata<T>(string key);

    void PutSessiondata<T>(string key, T value);

}

【问题讨论】:

    标签: .net asp.net-mvc tempdata controllercontext


    【解决方案1】:

    我不确切知道您要做什么,但TempDataDictionary 实现了IDictionary&lt;string, object&gt;,因此您可以让您的业务对象将其作为参数或使用构造函数注入。然后您可以让您的控制器将 TempData 作为参数传递给业务对象。通过使用字典接口,您的业务对象不再依赖于 ASP.NET MVC。

    【讨论】:

    • 感谢您的回复。我试图避免将临时数据/控制器上下文传递给这些方法。希望我上面的编辑更清楚。
    • @thanikkal,您是否尝试使用自定义提供程序覆盖将数据存储在内存中的默认 ASP.NET 会话提供程序?
    • 不确定覆盖是否是术语,但是是的,我正在尝试拥有自己的会话提供程序。
    • @thanikkal,在这种情况下,您需要通过实现 SessionStateStoreProviderBase 类并在 web.config 中注册会话状态提供程序来编写 Session-State Store Provider
    • 感谢指点。但我并不完全希望以 msdn 的方式处理会话内容。我最初从外部访问 MVC 内在对象的问题仍未得到解答。
    猜你喜欢
    • 2010-10-18
    • 2010-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2016-12-09
    • 2018-01-08
    相关资源
    最近更新 更多