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