在WCF客户端应用程序中,有许多无参数的方法,我们要将结果缓存到其中GetAllFoo()
,GetAllBar()
。这些用于填充下拉列表等,结果在客户端的运行期间不会改变。
这些结果当前正由存储在资源文件中的唯一字符串缓存 - 例如,GetAllCountries()
缓存在CountryKey
资源上。仅当缓存不包含请求的密钥时才会调用该服务。
public T Get<T, V>(string key, Func<V, T> serviceCall, V proxy)
{
if (!cache.Contains(key))
{
cache.Add(key, serviceCall(proxy));
}
return cache.GetData(key) as T;
}
这很好,除了我们需要维护资源文件中的密钥,并且需要确保每个方法都使用正确的缓存密钥,否则会中断。旧的Control + C,Control + V在这里引起一些麻烦,我不想去检查每个调用此方法的地方。
所以问题是:
serviceCall
委托上有一个Method
属性,用于描述要执行的方法。这是一个MethodInfo实例,后者又包含MethodHandle
属性。我是否正确地假设MethodHandle
属性唯一且一致地标识了引用的方法?
我将包装器更改为
public T Get<T, V>(Func<V, T> serviceCall, V proxy)
{
var key = serviceCall.Method.MethodHandle;
// etc
适当地封装了缓存和关键问题,&amp;消除了对调用者做出正确事情的依赖。
答案 0 :(得分:2)
http://msdn.microsoft.com/en-us/library/system.runtime.interopservices._methodbase.methodhandle.aspx
建议: