我创建了一些自定义属性,我将这些属性附加到处理程序中的方法中。自定义属性不仅仅是“标记符”,例如'RequiresAuthenticationAttribute'。一个简化的例子:
[EnforceParam("Account")]
在我的拦截器中,调用EnforceParam注释的方法,我想访问值“Account”。我目前正在为此做的是:
public override bool BeforeExecute(IOperation operation)
{
ReflectionBasedMethod method = (ReflectionBasedMethod)((MethodBasedOperation)operation).Method;
MethodInfo methodInfo = method.MethodInfo;
为了实现这一点,我必须将'Method'属性添加到OpenRasta的ReflectionBasedMethod。
可以在不破解OpenRasta的情况下实现同样的目标(我的速度为2.0 btw)?
答案 0 :(得分:4)
这是错误的问题。您正在寻找的只是:
var attribute = operation.FindAttribute<EnforceParamAttribute>()
不支持向下转换,操作应仅仅是为了反映操作及其输入。不要贬低,将中断并且您的代码不能保证超出一个恰好使用IMethod API的版本,这个版本在某些时候会被重写/删除。