У меня есть доступ только к ControllerContext
, а не Action____Contexts
Каков оптимальный способ получить текущий исполняемый файл ActionDescriptor?ActionDescriptor from ControllerContext
До сих пор единственным способом я нашел:
new ReflectedControllerDescriptor(context.Controller.GetType())
.FindAction(context, context.RouteData.GetRequiredString("action"));
Это оптимальный метод?
Тот факт, что класс называется ReflectedControllerDescriptor
, заставляет меня задаться вопросом, есть ли высокая стоимость для этой операции, поскольку она будет выполняться при каждом запросе на страницу? Связано это с тем, является ли этот класс внутренним кешем или я действительно должен кэшировать ReflectedControllerDescriptors
явно?
Выполнение некоторых копаний в источнике MVC, что является наиболее оптимальным способом без копирования всех методов, необходимых для выполнения того, что вы уже делаете. Однако я не понимаю, почему вы не могли кэшировать найденные действия, чтобы последующие действия были более эффективными. – Buildstarted
Кроме того, ReflectedControllerDescriptor использует отражение для получения действий, поскольку он не только рассматривает методы, но и атрибуты, связанные с этими методами. (ReflectedControllerDescriptor также кэширует результаты) – Buildstarted
@BuildStarted, поэтому использование отражения внутри 'ReflectedControllerDescriptor' действительно кэшируется, но, возможно, я мог бы кэшировать мои вызовы FindAction? –