public async Task <TAdvice> Handle(Func <Task <TAdvice> > next, ISolidProxyInvocation <TObject, TMethod, TAdvice> invocation)
 {
     // increase the step count.
     invocation.SetValue(StepCountKey, invocation.GetValue <int>(StepCountKey) + 1);
     if (invocation.IsLastStep)
     {
         return((TAdvice)(object)invocation.GetValue <int>(StepCountKey));
     }
     else
     {
         return(await next());
     }
 }
            public Task <IList <string> > Handle(Func <Task <IList <string> > > next, ISolidProxyInvocation <TObject, IList <string>, IList <string> > invocation)
            {
                var handlers = invocation.GetValue <IList <string> >("handlers");

                if (handlers == null)
                {
                    invocation.SetValue("handlers", handlers = new List <string>());
                }
                handlers.Add(GetType().Name);
                if (invocation.IsLastStep)
                {
                    return(Task.FromResult(handlers));
                }
                else
                {
                    return(next());
                }
            }
 public async Task <TAdvice> Handle(Func <Task <TAdvice> > next, ISolidProxyInvocation <TObject, TMethod, TAdvice> invocation)
 {
     invocation.SetValue("security_checked", true);
     return(await next());
 }