public virtual IDependencyResolver CreateChildDependencyResolver(Action <IDependencyManager>?childDependencyManagerCustomizer = null)
        {
            IAutofacDependencyManager childDependencyManager = new AutofacDependencyManager();

            ILifetimeScope container = GetContainer().BeginLifetimeScope(containerBuilder =>
            {
                if (childDependencyManagerCustomizer != null)
                {
                    childDependencyManager.UseContainerBuilder(containerBuilder);
                    childDependencyManagerCustomizer((IDependencyManager)childDependencyManager);
                }
            });

            childDependencyManager.UseContainer(container);

            return((IDependencyResolver)childDependencyManager);
        }
        public virtual IDependencyManager RegisterUsing(Func <IDependencyResolver, object> factory, TypeInfo[] servicesType, string?name = null, DependencyLifeCycle lifeCycle = DependencyLifeCycle.PerScopeInstance, bool overwriteExisting = true)
        {
            if (servicesType == null)
            {
                throw new ArgumentNullException(nameof(servicesType));
            }

            IRegistrationBuilder <object, SimpleActivatorData, SingleRegistrationStyle> registration = GetContainerBuidler().Register((context, parameter) =>
            {
                AutofacDependencyManager currentAutofacDepdencyManager = new AutofacDependencyManager();
                currentAutofacDepdencyManager.UseContainer(context.Resolve <ILifetimeScope>());
                return(factory.DynamicInvoke(currentAutofacDepdencyManager) !);
            }).As(servicesType);

            if (overwriteExisting == false)
            {
                registration = registration.PreserveExistingDefaults();
            }

            if (name != null)
            {
                foreach (TypeInfo serviceType in servicesType)
                {
                    registration = registration.Named(name, serviceType);
                }
            }

            if (lifeCycle == DependencyLifeCycle.Transient)
            {
                registration = registration.InstancePerDependency();
            }
            else if (lifeCycle == DependencyLifeCycle.SingleInstance)
            {
                registration = registration.SingleInstance();
            }
            else
            {
                registration = registration.InstancePerLifetimeScope();
            }

            return(this);
        }