private static bool FilterMatches(
     FilterScope scope,
     AutofacFilterCategory filterCategory,
     ILifetimeScope lifeTimeScope,
     HttpActionDescriptor descriptor,
     FilterPredicateMetadata metadata)
 {
     return(metadata.FilterCategory == filterCategory &&
            metadata.Scope == scope &&
            metadata.Predicate(lifeTimeScope, descriptor));
 }
 private static bool FilterMatchesAndNotAlreadyAdded(
     FilterContext filterContext,
     FilterScope scope,
     AutofacFilterCategory filterCategory,
     ILifetimeScope lifeTimeScope,
     FilterPredicateMetadata metadata,
     HttpActionDescriptor descriptor)
 {
     return(FilterMatches(scope, filterCategory, lifeTimeScope, descriptor, metadata) &&
            !MatchingFilterAlreadyAdded(filterContext, filterCategory, lifeTimeScope, descriptor, metadata));
 }
        private static bool MatchingFilterAlreadyAdded(FilterContext filterContext, AutofacFilterCategory filterCategory, ILifetimeScope lifeTimeScope, HttpActionDescriptor descriptor, FilterPredicateMetadata metadata)
        {
            var filters = filterContext.AddedFilters[filterCategory];

            return(filters.Any(filter => filter.Scope == metadata.Scope &&
                               filter.Predicate(lifeTimeScope, descriptor)));
        }