2012-01-19 8 views
0

私はリフレクトを使用して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 

しかし、私は、これが後続のオブジェクトのインスタンス化でオーバーライドされるため、明らかに機能しないことに気付きました。

ここで私は立ち往生しましたが、反射メタデータをキャッシュする抽象クラスをどのように実装できますか?

EDIT:

これは、私が思い付くことができる最高の(私の問題の回避策)で、イム望んで誰かがより良いものを提案することができますか?

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 

答えて