Dado que tengo acceso solo a ControllerContext
y no a Action____Contexts
, ¿cuál es la forma óptima de obtener Action Discriptor en ejecución?ActionDescriptor from ControllerContext
Hasta ahora, el único método que he encontrado es:
new ReflectedControllerDescriptor(context.Controller.GetType())
.FindAction(context, context.RouteData.GetRequiredString("action"));
es éste el método óptimo?
El hecho de que la clase se llame ReflectedControllerDescriptor
me lleva a preguntarme si esta operación tiene un costo elevado, ya que se ejecutará en cada solicitud de página. En relación con esto es lo hace esta clase internamente caché o debería ser en realidad el almacenamiento en caché ReflectedControllerDescriptors
explícitamente?
Investigar en la fuente MVC es la manera más óptima sin copiar todos los métodos necesarios para hacer lo que ya está haciendo. Sin embargo, no veo por qué no podría almacenar en caché las acciones encontradas para que las acciones posteriores sean más efectivas. – Buildstarted
Además, ReflectedControllerDescriptor utiliza el reflejo para obtener Acciones, ya que no solo mira los métodos sino también los atributos asociados a los métodos. (el ReflectedControllerDescriptor también almacena en caché los resultados) – Buildstarted
@BuildStarted, por lo que el uso de la reflexión dentro de 'ReflectedControllerDescriptor' está almacenado en la memoria caché, pero posiblemente podría almacenar en caché mis llamadas a FindAction. –