这是我的方法
public Component SaveComponent([ValidateMetaFields] Component componentToSave) {
...
}
这是我的自定义属性:
[AttributeUsage(AttributeTargets.Parameter)]
public class ValidateMetaFieldsAttribute : Attribute
{
public ValidateMetaFieldsAttribute()
{
// how to access `componentToSave` here?
}
}
我想知道有没有办法访问componentToSave
对象来自ValidateMetaFieldsAttribute
?我找不到任何示例代码或示例。
不,属性实例没有任何其所应用的目标的概念。
请注意,通常您会获取属性from一个目标,因此无论执行什么操作,都可能为接下来的操作提供信息。可能有点烦人,但希望不是不可行。
所有这一切的一个小例外是来电者信息属性 - 如果您使用类似的东西
[AttributeUsage(AttributeTargets.Parameter)]
public class ValidateMetaFieldsAttribute : Attribute
{
public ValidateMetaFieldsAttribute([CallerMemberName] string member = null)
{
...
}
}
...然后编译器将填写method name (SaveComponent
) 在这种情况下,即使该属性应用于参数。同样,您可以获取文件路径和行号。
然而,考虑到这个关于目的的评论,我认为你遇到了一个更大的问题:
在方法体运行之前验证 componentToSave 并抛出异常。
仅当获取属性时才会执行属性构造函数中的代码。它是not例如,在每个方法调用上执行。这很可能会让你所期待的一切变得不可行。
您可能想研究 AOP,例如和后锐利 https://www.postsharp.net/aop.net.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)