更复杂的属性参数

时间:2019-01-26 11:22:03

标签: vb.net attributes

我想使用System.Attribute为我的班级创建一些元数据。 我需要的是利用编译器的优势来获取名称,而不是使用string。但是我的方法无法完成,因为attibutes不接受我在这里写的复杂参数:

Public Class Foo
   Public Property Id as Integer
   <Attribute(AttributeInputA.Create(of Bar)(Function(item) item.Name))>
   Public Property Name as String
End Class 
Public Class Bar
    Public Property Name as String
End Class
<AttributeUsage(AttributeTargets.Property Or
                   AttributeTargets.Field,
                   AllowMultiple:=True)>
Public Class Attribute
   Public Sub New(attibuteInputA as AttributeInputA)
   End Sub
End Class
Public Class AttributeInputA
    Public Share Function Create(Of T)(System.Linq.Expressions.Expression(Of Func(Of Object , T)) AS AttributeInputA
    End Function
End Class

我想知道的是还有其他方法可以实现吗?

1 个答案:

答案 0 :(得分:1)

您可以将字符串反序列化为所需的任何内容。在这种情况下,您可以将代码用作CodeDom(需要编译器可用)或Reflection.Emit(不需要,但需要IL)的源代码。

无论哪种方式,似乎都给自己带来了很多麻烦,因为他们没有得到太多的回报。我会写出所需的特定案例,然后使用字典查找或类来查找它。