Let's continue our serie on AOP with another popular usage of interception: caching. Let's use the previously created project and add this class: public class CachingInterceptionBehavior : IInterceptionBehavior { private static IDictionary<string, MemoryCache> Cache = new Dictionary<string, MemoryCache>(); private static IList<string> SyncLock = new List<string>(); private static object SyncRoot = new object(); public IMethodReturn Invoke(IMethodInvocation input, GetNextInterceptionBehaviorDelegate getNext) { if (input.MethodBase.GetCustomAttribute<IgnoreCacheAttribute>() != null) { return getNext()(input, getNext); } var arguments = JsonConvert.SerializeObject(input.Arguments); string key = string.Concat(input.MethodBase.DeclaringType.FullName, "|", input.MethodBase.ToString(), "|", arguments); if (IsInCa