缓存抽象类的propertyinfo

时间:2012-01-19 10:55:40

标签: vb.net caching reflection abstract-class

我一直在努力实现一个使用反射实现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

1 个答案:

答案 0 :(得分:0)

如果您将代码放在Shared Sub New中,它应该只执行一次。

http://msdn.microsoft.com/en-us/library/aa711965(v=vs.71).aspx