PostSharp allows you to dramatically reduce the complexity of caching. It allows you to cache the return value of a method as a function of its arguments with just a custom attribute, namely the CacheAttribute aspect. The InvalidateCacheAttribute aspect and the CachingServices.Invalidation API offer a strongly-typed way to invalidate cached methods. Additionally, PostSharp is independent from the caching framework or server (called caching backend), so you can choose from several backends or implement an adapter for your own backend.