鉴于我只能访问ControllerContext
而不是Action____Contexts
什么是获取当前执行的ActionDescriptor的最佳方式?来自ControllerContext的ActionDescriptor
到目前为止,我已经找到了唯一的方法是:
new ReflectedControllerDescriptor(context.Controller.GetType())
.FindAction(context, context.RouteData.GetRequiredString("action"));
这是最佳的方法是什么?
类名为ReflectedControllerDescriptor
这个事实让我不知道这个操作是否有很高的成本,因为它会在每个页面请求中执行?与此相关的是这个类内部缓存,或者我应该明确缓存ReflectedControllerDescriptors
?
做一些挖掘MVC源代码,这几乎是最优化的方式,而不需要复制所需的所有方法来完成您已经在做的事情。但是,我不明白为什么您不能缓存找到的操作,以便后续操作更具性能。 – Buildstarted
此外,ReflectedControllerDescriptor确实使用反射来获取Actions,因为它不仅查看方法,而且还查看附加到方法的属性。 (ReflectedControllerDescriptor也会缓存结果) – Buildstarted
@BuildStarted所以'ReflectedControllerDescriptor'里面的反射用法确实被缓存了,但是可以说我可以将我的调用缓存到FindAction? –