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(); }