通过缓存中的值获取对象

Rex*_*x M 11 .net c# caching

抽象

我正在编写一个具有一些对象缓存的应用程序.它需要工作的方式是从缓存中检索对象时:

object foo = CacheProvider.CurrentCache.Get("key");
Run Code Online (Sandbox Code Playgroud)

foo应该是原始对象的本地副本,而不是引用.实现这个的最佳方法是什么?到目前为止,我唯一想到的方法是使用BinarySerializer来创建副本,但我觉得我错过了一个更好的方法.

细节

缓存实现的支持是任意的,因为它是基于提供程序的.我需要支持任何数量的缓存,从HttpRuntime缓存到类似Velocity.这里的重点是缓存支持和使用者代码之间的层 - 该层必须确保返回对象的副本.一些缓存已经可以做到这一点,但有些不会(HttpRuntime缓存是一个).

wom*_*omp 5

Rex - 我们在大型企业Web产品中实现了非常类似的东西,最后我们明确地创建了一个IDeepCloneable接口,我们的许多对象都实现了这个接口.有趣的是,我们用BinarySerializer支持它,只是因为它是一种简单易行的方式来制作一个对象的深层副本而不需要反思或强迫开发人员编写和测试克隆方法.

它就像一个魅力.我们的团队几次停下来考虑它,我们还没有找到更好的选择.