CacheAttribute 기능이 PostSharp입니다.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();
}
다음은 내가 사용하는 샘플 클래스입니다.
[Cache]
private static IDictionary<string, string> GetStateRegions(IEnumerable<State> states)
{
//some db call here to retrieve values;
}
그리고 이것은 내가 메서드를 호출하는 방법입니다 :
class State
{
public string Code { get; set; }
public string Name { get; set; }
}
그리고 캐시 할 필요가있는 방법
은 가 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가 필요합니다.
이것을 달성하기위한 좋은 접근 방법은 무엇입니까? 또한 다른 논리를 사용하여 여러 메소드에 대한 키를 작성할 수 있습니까 (메소드 인수 유형에 따라 다름)? 크게 어떤 포인터/제안을 주셔서 감사합니다.
그는 같은 측면을 선언하는 대신 ToString()의 값을 얻기 위해 당신은 항상 인수에 반영 할 수
사용해 볼 수 있습니다 목록 유형 또는 ICollection –
을 확인해야합니다. 방금 변경했습니다. –
나는 그것을 발사하고 그것이 효과가 있는지 볼 것이다. – muruge