我在尝试PostSharp的CacheAttribute功能。PostSharp - 动态缓存键
以下是我用于为每个缓存条目生成缓存键的方法。
private string BuildCacheKey(Arguments arguments)
{
var sb = new StringBuilder();
sb.Append(_methodName);
foreach (var argument in arguments.ToArray())
{
sb.Append(argument == null ? "_" : argument.ToString());
}
return sb.ToString();
}
下面是我使用的示例类。
class State
{
public string Code { get; set; }
public string Name { get; set; }
}
这需要缓存的方法是:
[Cache]
private static IDictionary<string, string> GetStateRegions(IEnumerable<State> states)
{
//some db call here to retrieve values;
}
这是我如何调用该方法:
IList<State> states = new List<State>();
states.Add(new State {Code = "NM", Name = "New Mexico"});
states.Add(new State {Code = "CA", Name = "California"});
GetStateRegions(states);
的BuildCacheKey方法构建了以下缓存键 - “GetStateRegionsSystem.Collections.Generic.List`1 [ConsoleApplication1.State]”
我希望缓存键内置类似于“GetStateRegions [ConsoleApplication1.State]” - 例如上面的调用“GetStateRegionsNMCA [ConsoleApplication1.State]”状态码NM和CA.
什么是实现这一目标的好方法?也有可能使用不同的逻辑来为不同的方法构建密钥(基于方法参数类型)?将不胜感激任何指针/建议。
他需要检查一种列表或者ICollection –
2011-06-10 23:16:16
是的,我只是改变了它 – 2011-06-10 23:16:32
我会给它一个镜头,看看是否有效。 – muruge 2011-06-10 23:38:36