public static object GenerateProxy(ITargetSelector selector, ProxyGenerator generator = null)
        {
            // CreateInterfaceProxyWithTargetInterface only supports IChangeProxyTarget on the primary interface (DYNPROXY-169),
            //  so we actually create a series of proxies, each one redirecting a single interface.
            // Also, all target proxies have to claim to implement all the interfaces.
            // This is messy, but it works.
            generator = generator ?? Generator;
            var interceptor = new RedirectingInterceptor(selector);
            var interfaces  = selector.GetSupportedInterfaces().ToArray();
            var options     = new ProxyGenerationOptions();
            var proxy       = generator.CreateInterfaceProxyWithoutTarget(interfaces[0], interfaces);

            for (int i = 0; i != interfaces.Length; ++i)
            {
                proxy = generator.CreateInterfaceProxyWithTargetInterface(interfaces[i], interfaces, proxy, interceptor);
            }
            return(proxy);
        }