Estoy tratando de obtener el nombre de un método en un tipo que utiliza una expresión lambda. Estoy utilizando Windows Identity Foundation y necesito definir políticas de acceso con el nombre de tipo con espacio de nombres como recurso y el nombre del método como acción. Aquí hay un ejemplo.Obtener el nombre del método mediante la expresión de Lambda
Este es el tipo que sería conseguir el nombre del tipo y el nombre del método de:
namespace My.OrderEntry {
public class Order {
public void AddItem(string itemNumber, int quantity) {}
}
}
Así es como me gustaría definir la política de acceso a través de DSL:
ForResource<Order>().Performing(o => o.AddItem).AllowUsersHaving(new Claim());
De esa declaración, me gustaría obtener "My.OrderEntry.Order" como el recurso y "AddItem" como la acción. Obtener el nombre del tipo con el espacio de nombres no es problema, pero no creo que pueda usar un lambda para un método como el que trato de hacer.
public static IPermissionExp Performing<T>(
this IActionExp<T> exp,
Func<T, delegate???> action) {} //this is where I don't know what to define
¿Es posible incluso hacer este tipo de cosas? ¿Hay alguna otra manera de hacer este tipo de cosas sin usar cadenas mágicas?
¿Qué se supone que agrega AddItem? – pdr
Realmente no importa lo que haga AddItem, solo necesito el nombre del método sin usar cadenas mágicas. – awilinsk
Es lo que importa. Creo que hacia donde te diriges es una Acción pero no creo que esa sea la mejor respuesta. –
pdr