public static IFunction <TInput, TOutput> ApplyAuthorizationAspect <TInput, TOutput, TResourceId>(
     this IFunction <TInput, TOutput> decorated,
     IResourceAuthorize <TResourceId> authorizer,
     Func <TInput, TResourceId> resourceIdSelector)
 {
     return(new Aspect <TInput, TOutput, TResourceId>(decorated, authorizer, resourceIdSelector));
 }
 public Aspect(
     IFunction <TInput, TOutput> decorated,
     IResourceAuthorize <TResourceId> authorizer,
     Func <TInput, TResourceId> resourceIdSelector)
 {
     this.decorated          = decorated;
     this.authorizer         = authorizer;
     this.resourceIdSelector = resourceIdSelector;
 }