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; }