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());
        }
示例#2
0
        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 (DecoratorHelpers.IsDecorateeFactoryDependencyType(decorateeParameter.ParameterType, serviceType))
            {
                // Adding a verifier makes sure the graph for the decoratee gets created,
                // which allows testing whether constructing the graph fails.
                AddVerifierForDecorateeFactoryDependency(decorateeExpression, realProducer);

                // By adding the decoratee producer, we allow that object graph to be diagnosed.
                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());
        }
示例#3
0
        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());
        }