Aph*_*pha 5 c# custom-data-attribute
这是我的方法
public Component SaveComponent([ValidateMetaFields] Component componentToSave) {
...
}
Run Code Online (Sandbox Code Playgroud)
这是我的自定义属性:
[AttributeUsage(AttributeTargets.Parameter)]
public class ValidateMetaFieldsAttribute : Attribute
{
public ValidateMetaFieldsAttribute()
{
// how to access `componentToSave` here?
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道有没有办法从中访问componentToSave对象ValidateMetaFieldsAttribute?我找不到任何示例代码或示例.
Jon*_*eet 17
不,属性实例没有任何关于它们应用于的目标的概念.
请注意,通常您从目标中获取属性,因此无论何时进行该获取都可能将信息提供给接下来的任何内容.可能有点讨厌,但希望不是不可行的.
所有这一切的一个小例外是调用者信息属性 - 如果你使用类似的东西
[AttributeUsage(AttributeTargets.Parameter)]
public class ValidateMetaFieldsAttribute : Attribute
{
public ValidateMetaFieldsAttribute([CallerMemberName] string member = null)
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
...然后编译器将在这种情况下填写方法名称(SaveComponent),即使该属性应用于参数.同样,您可以获取文件路径和行号.
鉴于此目的的评论,我认为你有一个更大的问题:
验证componentToSave并在方法体甚至运行之前抛出异常.
只有在获取属性时,才会执行属性构造函数中的代码.例如,它不会在每个方法调用上执行.这可能会使你期望的任何东西变得不可行.
您可能希望查看AOP,例如使用PostSharp.
| 归档时间: |
|
| 查看次数: |
1236 次 |
| 最近记录: |