代码之家  ›  专栏  ›  技术社区  ›  ChessWhiz

在.NET中缓存单个属性或方法

  •  3
  • ChessWhiz  · 技术社区  · 14 年前

    Public ReadOnly Property MyProperty As List(Of MyType)
        Get
            Using service As New MyDatabaseService
                Return service.GetMyTypeList()
            End Using
        End Get
    End Property
    

    因为这个服务需要到数据库的往返,所以我想缓存结果,以便在同一页生命周期内(不需要ViewState)进行将来的访问。我知道可以这样做:

    Private Property _myProperty As List(Of MyType)
    Public ReadOnly Property MyProperty As List(Of MyType)
        Get
            If _myProperty Is Nothing Then
                Using service As New MyDatabaseService
                    _myProperty = service.GetMyTypeList()
                End Using
            End If
    
            Return _myProperty
        End Get
    End Property
    

    现在是问题:有没有任何方法可以通过一个属性来利用缓存,“自动”缓存这个属性的输出,而不必显式地声明、测试和设置缓存对象,如图所示?

    1 回复  |  直到 14 年前
        1
  •  1
  •   Josh    14 年前

    答案是 ,但您需要使用 Aspect Oriented Programming Castle Windsor PostSharp 有两个优秀的.net框架可以帮助您实现这一目标,但这绝对不是一个轻松的话题。

    每种方法都有其优点和缺点,但我敦促您研究这个主题,因为它不仅仅涉及缓存。许多常见的任务,如异常处理和日志记录,可以很容易地重构成方面,使您的代码更加干净。