本文整理汇总了C#中MethodExecutionArgs.GetCacheDictionary方法的典型用法代码示例。如果您正苦于以下问题:C# MethodExecutionArgs.GetCacheDictionary方法的具体用法?C# MethodExecutionArgs.GetCacheDictionary怎么用?C# MethodExecutionArgs.GetCacheDictionary使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类MethodExecutionArgs
的用法示例。
在下文中一共展示了MethodExecutionArgs.GetCacheDictionary方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: OnEntry
// Executed at runtime, before the method.
public override void OnEntry(MethodExecutionArgs eventArgs)
{
var cache = eventArgs.GetCacheDictionary();
// Compose the cache key.
// Ignore ICacheContext every time
List<object> args = new List<object>();
foreach (object arg in eventArgs.Arguments)
{
if (arg is ICacheContext)
{
args.Add(null);
}
else
{
args.Add(arg);
}
}
string key = this.formatStrings.Format(
eventArgs.Instance, eventArgs.Method, args.ToArray());
// Check if cachable param has been detected
if (cache == null)
{
//Preserve the key in case cache gets created prior to exiting the method
eventArgs.MethodExecutionTag = key;
}
else
{
// Test whether the cache contains the current method call.
lock (cache)
{
object value;
if (!cache.TryGetValue(key, out value))
{
// If not, we will continue the execution as normally.
// We store the key in a state variable to have it in the OnExit method.
eventArgs.MethodExecutionTag = key;
}
else
{
// If it is in cache, we set the cached value as the return value
// and we force the method to return immediately.
eventArgs.ReturnValue = value;
eventArgs.FlowBehavior = FlowBehavior.Return;
}
}
}
}
示例2: OnSuccess
// Executed at runtime, after the method.
public override void OnSuccess(MethodExecutionArgs eventArgs)
{
var cache = eventArgs.GetCacheDictionary();
if (cache != null)
{
// Retrieve the key that has been computed in OnEntry.
string key = (string)eventArgs.MethodExecutionTag;
// Put the return value in the cache.
lock (cache)
{
cache[key] = eventArgs.ReturnValue;
}
}
else
{
throw new InvalidOperationException("No cacheable context or cache dictionary is present");
}
}