2011-10-03 69 views
1

我在处理程序中创建了一些自定义属性,并将其附加到我的方法中。自定义属性不仅仅是“标签”,例如, 'RequiresAuthenticationAttribute'。一个简单的例子:在OperationInterceptor中访问MethodInfo

[EnforceParam("Account")] 

在我的拦截,被调用与EnforceParam注解的方法,我想获得进入价值“帐户”。什么我目前在做该是这样的:

public override bool BeforeExecute(IOperation operation) 
{ 
    ReflectionBasedMethod method = (ReflectionBasedMethod)((MethodBasedOperation)operation).Method; 
    MethodInfo methodInfo = method.MethodInfo; 

对于工作,我不得不添加的“方法”属性OpenRasta的ReflectionBasedMethod。

同样可以完成没有黑客OpenRasta(我在2.0 btw)?

回答

4

这是错误的问题。您要查找的根本:不支持

var attribute = operation.FindAttribute<EnforceParamAttribute>() 

向下转换和操作要体现的操作和它的输入,故意的。不要沮丧,它休息和你的代码不能保证超出一个版本,恰巧使用IMethod API,这是在某些时候被重写/删除。

+0

太棒了,谢谢。我去了FindAttributes(复数),因为我可以有多个相同类型的属性。这引发了一个问题:当我在一个方法上有两个EnforceParamAttributes时,BeforeExecute在同一个拦截器上被调用两次,但由于我没有调用BeforeExecute的属性实例,所以我将使用FindAttributes来查看所有属性,两次是没有必要的。任何关于如何解决这个问题的想法,除了在BeforeExecute中设置一个标记“ranBefore”? –

+0

@EugeneBeresovksy:这可能值得另一个问题 - 我相信如果你接受他的回答,serialseb会很感激! –

+0

如果你只注册一次,不应该有一次以上的拦截器执行,那是你所看到的吗? – SerialSeb