Dato che ho accesso solo a ControllerContext
e non a Action____Contexts
qual è il modo ottimale per ottenere l'ActionDescriptor di esecuzione corrente?ActionDescriptor da ControllerContext
Finora l'unico metodo che ho trovato è:
new ReflectedControllerDescriptor(context.Controller.GetType())
.FindAction(context, context.RouteData.GetRequiredString("action"));
È questo il metodo ottimale?
Il fatto che la classe sia denominata ReflectedControllerDescriptor
mi porta a chiedermi se vi è un costo elevato per questa operazione poiché verrà eseguita su ogni richiesta di pagina? In relazione a ciò, questa classe internamente memorizza nella cache o dovrei effettivamente memorizzare nella cache ReflectedControllerDescriptors
in modo esplicito?
Fare qualche ricerca nella sorgente MVC è praticamente il modo più ottimale senza copiare tutti i metodi necessari per fare ciò che si sta già facendo. Tuttavia, non vedo perché non è possibile memorizzare nella cache le azioni trovate in modo che le azioni successive siano più performanti. – Buildstarted
Inoltre ReflectedControllerDescriptor utilizza la reflection per ottenere Actions poiché non considera solo i metodi ma anche gli attributi associati ai metodi. (il ReflectedControllerDescriptor memorizza anche i risultati nella cache) – Buildstarted
@BuildStarted in modo che l'uso della riflessione all'interno di 'ReflectedControllerDescriptor' sia effettivamente memorizzato nella cache, ma probabilmente potrei memorizzare le mie chiamate su FindAction? –