private OverriddenParameter[] CreateOverriddenParameters(Expression decorateeExpression)
        {
            ParameterInfo decorateeParameter =
                GetDecorateeParameter(this.registeredServiceType, this.decoratorConstructor);

            decorateeExpression =
                this.GetExpressionForDecorateeDependencyParameterOrNull(
                    decorateeParameter, this.registeredServiceType, decorateeExpression);

            var currentProducer = this.GetServiceTypeInfo(this.e).GetCurrentInstanceProducer();

            var decorateeOverriddenParameter =
                new OverriddenParameter(decorateeParameter, decorateeExpression, currentProducer);

            IEnumerable<OverriddenParameter> predicateContextOverriddenParameters =
                this.CreateOverriddenDecoratorContextParameters(currentProducer);

            var overriddenParameters = (new[] { decorateeOverriddenParameter })
                .Concat(predicateContextOverriddenParameters);

            return overriddenParameters.ToArray();
        }
        private OverriddenParameter[] CreateOverriddenParameters(Type serviceType,
            ConstructorInfo decoratorConstructor, Expression decorateeExpression,
            InstanceProducer realProducer, ServiceTypeDecoratorInfo info)
        {
            ParameterInfo decorateeParameter = GetDecorateeParameter(serviceType, decoratorConstructor);

            decorateeExpression = this.GetExpressionForDecorateeDependencyParameterOrNull(
                decorateeParameter, serviceType, decorateeExpression);

            var currentProducer = info.GetCurrentInstanceProducer();

            if (IsDecorateeFactoryDependencyParameter(decorateeParameter, serviceType))
            {
                AddVerifierForDecorateeFactoryDependency(decorateeExpression, realProducer);

                realProducer.AddProducerToVerify(currentProducer);

                currentProducer = this.CreateDecorateeFactoryProducer(decorateeParameter);
            }

            var decorateeOverriddenParameter =
                new OverriddenParameter(decorateeParameter, decorateeExpression, currentProducer);

            IEnumerable<OverriddenParameter> predicateContextOverriddenParameters =
                this.CreateOverriddenDecoratorContextParameters(decoratorConstructor, currentProducer);

            var overriddenParameters = (new[] { decorateeOverriddenParameter })
                .Concat(predicateContextOverriddenParameters);

            return overriddenParameters.ToArray();
        }