3

我正在使用一个项目,该项目在其授权操作过滤器中设置变量(例如当前用户配置文件对象),并将它们存储在ViewData以下操作方法中以供访问。

然后操作方法从存储库中调用功能。我正在尝试找到一种在不修改存储库的方法签名ViewData的情况下从存储库访问的方法,并希望有一种方法可以通过我可以从存储库调用的功能来追踪它。HttpContext.Current

有人能帮忙吗?为了清楚起见,我唯一可以修改的代码是在存储库方法中:(

public class MyController : Controller {
    [MyAuthorize]                   // ViewData items are set here
    public void MyAction(int id)
    {
        new MyRepository().DoSomething(id); // Need to access ViewData items within this repository method and am unable to alter the method signature :(
    }
}
4

1 回答 1

1

我很确定答案是否定的。

当您查看 ASP.NET MVC 源代码时,ControllerBase在第一次使用时实例化一个 ViewData 字典。然后,当您调用时,将使用字典作为参数实例化View()一个 new 。它看起来不像是应用于您可以从存储库内部访问的公共静态属性或类。ViewResultControllerBase.ViewDataHttpContext

我认为你最好的选择是使用HttpContext.Items为这种类型的通信而构建的。尽管可能不如仅修改存储库以接受额外数据那么理想。

于 2014-06-12T14:14:38.400 回答