【发布时间】:2010-02-22 21:25:49
【问题描述】:
我正在尝试使用 lambda 表达式获取类型上的方法名称。我正在使用 Windows Identity Foundation,需要使用命名空间作为资源的类型名称和作为操作的方法名称来定义访问策略。这是一个例子。
这是我要从中获取类型名称和方法名称的类型:
namespace My.OrderEntry {
public class Order {
public void AddItem(string itemNumber, int quantity) {}
}
}
这就是我想通过 DSL 定义访问策略的方式:
ForResource<Order>().Performing(o => o.AddItem).AllowUsersHaving(new Claim());
从该声明中,我想将“My.OrderEntry.Order”作为资源,将“AddItem”作为操作。使用命名空间获取类型名称没有问题,但我认为我不能将 lambda 用于我正在尝试做的方法。
public static IPermissionExp Performing<T>(
this IActionExp<T> exp,
Func<T, delegate???> action) {} //this is where I don't know what to define
这种事情甚至可以做到吗?有没有其他方法可以在不使用魔术字符串的情况下做这种事情?
【问题讨论】:
-
AddItem 应该添加什么?
-
AddItem 做什么并不重要,我只需要方法的名称而不使用魔术字符串。
-
这很重要。我认为你要去的地方是一个 Action
但我认为这不是最好的答案。 -
可以做Action
吗?我真的只需要获取方法名称来定义是否允许用户在该类型(资源)上调用该方法(操作)。 -
好的,我明白你现在想要做什么了。还有一个问题 - 传递给 AddItem 的值从何而来?
标签: c# reflection lambda