在.NET中缓存单个属性或方法
在ASP.NET Web窗体中使用VB.NET 我有一个属性,它通过实体框架从数据库中读取列表,如下所示:在.NET中缓存单个属性或方法,.net,caching,.net,Caching,在ASP.NET Web窗体中使用VB.NET 我有一个属性,它通过实体框架从数据库中读取列表,如下所示: Public ReadOnly Property MyProperty As List(Of MyType) Get Using service As New MyDatabaseService Return service.GetMyTypeList() End Using End Get End Property
Public ReadOnly Property MyProperty As List(Of MyType)
Get
Using service As New MyDatabaseService
Return service.GetMyTypeList()
End Using
End Get
End Property
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
因为此服务需要往返数据库,所以我希望缓存结果,以便在同一页面生命周期内(不需要ViewState)将来进行访问。我知道这可以通过以下方式实现:
Public ReadOnly Property MyProperty As List(Of MyType)
Get
Using service As New MyDatabaseService
Return service.GetMyTypeList()
End Using
End Get
End Property
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
现在,问题是:有没有办法通过属性利用缓存,“自动”缓存此属性的输出,而不必如图所示显式声明、测试和设置缓存对象?答案有点像,但您需要使用技术来实现这一点。或者有两个优秀的.net框架可以帮助您实现这一目标,但无论如何这都不是一个轻松的主题
基本上,AOP涉及到将常见的样板功能包装到可以用来修饰代码的方面,只留下您想要的本质。这可以像Castle一样在运行时动态完成,也可以通过IL编织(将新代码动态编译到程序集中)在编译时完成
每种方法都有其优缺点,但我敦促您研究这个主题,因为它所涵盖的范围不仅仅是缓存。许多常见任务(如异常处理和日志记录)可以轻松地重构为方面,以使代码更加干净。“自动”缓存?不可以。最好是让要缓存的对象从定义可缓存功能的接口/抽象类继承。@William-Postsharp提供100%免费的入门版/社区版。它甚至可以用于商业产品: