Chr*_*sic 14 c# controller controllercontext asp.net-mvc-3
鉴于我只能访问ControllerContext而不是Action____Contexts获取当前正在执行的ActionDescriptor的最佳方式是什么?
到目前为止,我发现的唯一方法是:
new ReflectedControllerDescriptor(context.Controller.GetType())
.FindAction(context, context.RouteData.GetRequiredString("action"));
Run Code Online (Sandbox Code Playgroud)
这是最佳方法吗?
这个类被命名的事实ReflectedControllerDescriptor让我想知道这个操作是否会付出沉重的代价,因为它会在每个页面请求上执行?与此相关的是此类内部缓存还是我应该实际缓存ReflectedControllerDescriptors?
做一些深入研究MVC源代码,这几乎是最优化的方法,而不需要复制你所做的事情所需的所有方法.但是,我不明白为什么你不能缓存找到的动作,以便后续调用更高效.
内部ReflectedControllerDescriptor也缓存结果,尽管似乎有一些开销,因为它每次都检查所有属性.它看起来像是HttpPostAttribute什么样的东西.
我的建议是坚持使用你正在使用的东西而不是自己缓存它.如果出于某种原因,基础方法的工作方式发生了变化,那么您已经更新了,并且不必担心更改存储缓存项目的方式.
| 归档时间: |
|
| 查看次数: |
2865 次 |
| 最近记录: |