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