我一直在努力实现一个使用反射实现SQL到对象映射的抽象基类。
我做了一些基准测试,并决定为对象的属性信息实现缓存策略(以防止将来查找它们)。我的第一直觉是尝试实现这样的东西。
Public MustInherit Class BaseModel
Implements IFillable
Private Shared PropertyCache As List(Of PropertyInfo)
Sub New()
PropertyCache = New List(Of PropertyInfo)
For Each itm As PropertyInfo In Me.GetType().GetProperties
PropertyCache.Add(itm)
Next
End Sub
End Class
然后我意识到这显然不会起作用,因为它会在后续的对象实例化中被覆盖。
所以现在我卡住了,你如何实现一个缓存其反射“元数据”的抽象类?
编辑:
这是最好的(解决我的问题)我可以想出来,我希望有人能提出更好的建议吗?
Public MustInherit Class BaseModel
Implements IFillable
Private Shared ReadOnly PropertyCache As New Dictionary(Of String, PropertyInfo)
Sub New()
Dim typeName As String = Me.GetType.ToString
For Each itm As PropertyInfo In Me.GetType().GetProperties
Dim lookupKey As String = String.Format("{0}_{1}", typeName, itm.Name)
If Not PropertyCache.ContainsKey(lookupKey) Then
PropertyCache.Add(lookupKey, itm)
End If
Next
End Sub
End Class
答案 0 :(得分:0)
如果您将代码放在Shared Sub New中,它应该只执行一次。
http://msdn.microsoft.com/en-us/library/aa711965(v=vs.71).aspx