InterceptorGroup<S>
using Castle.Core;
using Castle.DynamicProxy;
using Castle.MicroKernel.ModelBuilder.Descriptors;
namespace Castle.MicroKernel.Registration.Interceptor
{
    public class InterceptorGroup<S> : RegistrationGroup<S> where S : class
    {
        private readonly InterceptorReference[] interceptors;
        public ComponentRegistration<S> Anywhere {
            get {
                AddDescriptor(new InterceptorDescriptor(interceptors));
                return base.Registration;
            }
        }
        public ComponentRegistration<S> First {
            get {
                AddDescriptor(new InterceptorDescriptor(interceptors, InterceptorDescriptor.Where.First));
                return base.Registration;
            }
        }
        public ComponentRegistration<S> Last {
            get {
                AddDescriptor(new InterceptorDescriptor(interceptors, InterceptorDescriptor.Where.Last));
                return base.Registration;
            }
        }
        public InterceptorGroup(ComponentRegistration<S> registration, InterceptorReference[] interceptors)
            : base(registration)
        {
            this.interceptors = interceptors;
        }
        public ComponentRegistration<S> AtIndex(int index)
        {
            AddDescriptor(new InterceptorDescriptor(interceptors, index));
            return base.Registration;
        }
        public InterceptorGroup<S> SelectedWith(IInterceptorSelector selector)
        {
            base.Registration.SelectInterceptorsWith(selector);
            return this;
        }
    }
}