public virtual object CreateCustomClassProxy(Type baseClass, 
            IInvocationHandler handler, GeneratorContext context)
        {
            AssertCreateClassProxyArguments(baseClass, handler, context);

            Type newType = ProxyBuilder.CreateCustomClassProxy(baseClass, context);
            return CreateProxyInstance( newType, handler, context );
        }
 protected virtual object CreateProxyInstance(Type type, IInvocationHandler handler, GeneratorContext context)
 {
     return CreateProxyInstance( type, handler );
 }
 /// <summary>
 /// 
 /// </summary>
 /// <param name="interfaces"></param>
 /// <param name="handler"></param>
 /// <param name="context"></param>
 /// <returns></returns>
 public virtual object CreateCustomProxy(Type[] interfaces, 
     IInvocationHandler handler, GeneratorContext context)
 {
     AssertCreateProxyArguments( interfaces, handler, context );
     Type newType = ProxyBuilder.CreateCustomInterfaceProxy(interfaces, context);
     return CreateProxyInstance( newType, handler, context );
 }
        protected static void AssertCreateProxyArguments(Type[] interfaces, IInvocationHandler handler, GeneratorContext context)
        {
            AssertCreateProxyArguments(interfaces, handler);

            if (context == null)
            {
                throw new ArgumentNullException("context");
            }
        }
 /// <summary>
 /// 
 /// </summary>
 /// <param name="theInterface"></param>
 /// <param name="handler"></param>
 /// <param name="context"></param>
 /// <returns></returns>
 public virtual object CreateCustomProxy(Type theInterface, 
     IInvocationHandler handler,
     GeneratorContext context)
 {
     return CreateCustomProxy( new Type[] { theInterface }, handler, context );
 }