private void HandleException(ActivationContext ctx, Exception ex)
 {
     ctx.SetParameter("Exception", ex);
     OnException(ctx, ex);
 }
 protected virtual void OnException(ActivationContext ctx, Exception exception)
 {
 }
 /// <summary>
 ///
 /// </summary>
 /// <param name="context"></param>
 /// <returns>return the incoming context</returns>
 protected abstract ActivationContext BeforeProcessing(ActivationContext context);
 /// <summary>
 ///
 /// </summary>
 /// <param name="context"></param>
 /// <returns>return the incoming context</returns>
 protected abstract ActivationContext AfterProcesssing(ActivationContext context);
 /// <summary>
 /// Uses the sync implementation as default
 /// </summary>
 /// <param name="context"></param>
 /// <returns>return the incoming context</returns>
 protected virtual Task <ActivationContext> BeforeProcessingAsync(ActivationContext ctx)
 {
     return(Task.FromResult(BeforeProcessing(ctx)));
 }
 protected virtual object AlternateProceed(ActivationContext ctx)
 {
     return(null);
 }
 /// <summary>
 /// Uses the sync implementation as default
 /// </summary>
 /// <param name="ctx"></param>
 /// <returns></returns>
 protected virtual Task <object> AlternateProceedAsync(ActivationContext ctx)
 {
     return(Task.FromResult(AlternateProceed(ctx)));
 }