public static ProxyCreator CreateComplexProxy(this ProxyHelper proxyHelper, Type type, INameTransfer nameTransfer, INamedCreator namedCreator, Visitors.IPropertyVisitor propertyVisitor)
        {
            if (proxyHelper is null)
            {
                throw new ArgumentNullException(nameof(proxyHelper));
            }

            if (type is null)
            {
                throw new ArgumentNullException(nameof(type));
            }

            if (nameTransfer is null)
            {
                throw new ArgumentNullException(nameof(nameTransfer));
            }

            if (namedCreator is null)
            {
                throw new ArgumentNullException(nameof(namedCreator));
            }

            if (propertyVisitor is null)
            {
                throw new ArgumentNullException(nameof(propertyVisitor));
            }

            var creator = new ProxyCreator(proxyHelper, type, nameTransfer, namedCreator, propertyVisitor);

            creator.Analysis();
            return(creator);
        }
 public static ProxyCreator CreateComplexProxy <T>(this ProxyHelper proxyHelper, INameTransfer nameTransfer, INamedCreator namedCreator, Visitors.IPropertyVisitor propertyVisitor)
     where T : class
 {
     return(CreateComplexProxy(proxyHelper, typeof(T), nameTransfer, namedCreator, propertyVisitor));
 }