public IInterceptor[] SelectInterceptors(Type type, MethodInfo method, IInterceptor[] interceptors)
        {
            Logger.Trace(m => m("Called interceptor selector for method {0}.{1} and interceptors {2}",
                                type.FullName,
                                method.Name,
                                interceptors
                                    .Select(i => i.GetType().Name)
                                    .Aggregate((s1, s2) => s1 + " " + s2)));

            var applicableMappings = GetInterceptorsApplicableTo(type, method);
            var applicableInterceptors = interceptors.Where(x => applicableMappings.Any(m => m.InterceptorType == x.GetType())).ToArray();

            Logger.TraceFormat("Applying {0} interceptors[{1}] to method {2}.{3}...",
                               applicableInterceptors.Length,
                               string.Join(", ", applicableInterceptors.Select(x => x.GetType().Name).ToArray()),
                               type.FullName, method.Name);

            return applicableInterceptors;
        }