internal void AddAppliedDecorator(Type decoratorType, Container container, Lifestyle lifestyle, Expression decoratedExpression, IEnumerable<KnownRelationship> decoratorRelationships = null) { var registration = new ExpressionRegistration(decoratedExpression, decoratorType, lifestyle, container); registration.ReplaceRelationships(decoratorRelationships ?? Enumerable.Empty<KnownRelationship>()); var producer = new InstanceProducer(this.registeredServiceType, registration); this.appliedDecorators.Add(new DecoratorInfo(decoratorType, producer)); }
internal bool SatisfiesPredicate() { // We don't have an expression at this point, since the instances are not created by the container. // Therefore we fake an expression so it can still be passed on to the predicate the user might // have defined. var expression = Expression.Constant(null, this.registeredServiceType); var registration = new ExpressionRegistration(expression, this.registeredServiceType, Lifestyle.Unknown, this.Container); registration.ReplaceRelationships(this.e.InstanceProducer.GetRelationships()); this.Context = this.CreatePredicateContext(this.e.InstanceProducer, registration, this.registeredServiceType, expression); return this.SatisfiesPredicate(this.Context); }
internal void ApplyDecorator() { var registration = new ExpressionRegistration(this.e.Expression, this.registeredServiceType, Lifestyle.Unknown, this.Container); registration.ReplaceRelationships(this.e.InstanceProducer.GetRelationships()); var serviceTypeInfo = this.GetServiceTypeInfo(this.e.Expression, this.e.InstanceProducer, registration, this.registeredServiceType); Registration decoratorRegistration; var decoratedExpression = this.BuildDecoratorExpression(out decoratorRegistration); this.e.Expression = decoratedExpression; // Add the decorator to the list of applied decorator. This way users can use this // information in the predicate of the next decorator they add. serviceTypeInfo.AddAppliedDecorator(this.registeredServiceType, this.decoratorType, this.Container, this.Lifestyle, decoratedExpression); this.e.KnownRelationships.AddRange(decoratorRegistration.GetRelationships()); }
protected InstanceProducer CreateDecorateeFactoryProducer(ParameterInfo parameter) { // We create a dummy expression with a null value. Much easier than passing on the real delegate. // We won't miss it, since the created InstanceProducer is just a dummy for purposes of analysis. var dummyExpression = Expression.Constant(null, parameter.ParameterType); var registration = new ExpressionRegistration(dummyExpression, this.Container); return new InstanceProducer(parameter.ParameterType, registration); }
private static InitializationContext CreateDummyInitializationContext() { var registration = new ExpressionRegistration(Expression.Constant(null), new Container()); return new InitializationContext(new InstanceProducer(typeof(object), registration), registration); }