private Expression BuildExpressionInternal()
        {
            // We must lock the container, because not locking could lead to race conditions.
            this.Container.LockContainer();

            var expression = this.Registration.BuildExpression(this);

            if (expression == null)
            {
                throw new ActivationException(StringResources.RegistrationReturnedNullFromBuildExpression(
                                                  this.Registration));
            }

            var e = new ExpressionBuiltEventArgs(this.ServiceType, expression);

            e.Lifestyle            = this.Lifestyle;
            e.InstanceProducer     = this;
            e.ReplacedRegistration = this.Registration;

            this.Container.OnExpressionBuilt(e, this);

            if (!object.ReferenceEquals(this.Registration, e.ReplacedRegistration))
            {
                this.Registration = e.ReplacedRegistration;
            }
            else
            {
                this.overriddenLifestyle = e.Lifestyle;
            }

            return(e.Expression);
        }
        internal ExpressionBuiltEventArgs?OnExpressionBuilt(
            InstanceProducer instanceProducer, Expression expression)
        {
            if (this.expressionBuilt != null)
            {
                var relationships =
                    new KnownRelationshipCollection(instanceProducer.GetRelationships().ToList());

                var e = new ExpressionBuiltEventArgs(
                    instanceProducer.ServiceType,
                    expression,
                    instanceProducer,
                    replacedRegistration: instanceProducer.Registration,
                    knownRelationships: relationships);

                this.expressionBuilt(this, e);

                if (relationships.HasChanged)
                {
                    instanceProducer.ReplaceRelationships(e.KnownRelationships);
                }

                return(e);
            }
            else
            {
                return(null);
            }
        }
Beispiel #3
0
        internal void OnExpressionBuilt(ExpressionBuiltEventArgs e, InstanceProducer instanceProducer)
        {
            if (this.expressionBuilt != null)
            {
                var relationships =
                    new KnownRelationshipCollection(instanceProducer.GetRelationships().ToList());

                e.KnownRelationships = relationships;

                this.expressionBuilt(this, e);

                if (relationships.HasChanged)
                {
                    instanceProducer.ReplaceRelationships(e.KnownRelationships);
                }
            }
        }
        private Expression BuildExpressionInternal()
        {
            // We must lock the container, because not locking could lead to race conditions.
            this.Registration.Container.LockContainer();

            var expression = this.Registration.BuildExpression(this);

            if (expression == null)
            {
                throw new ActivationException(StringResources.RegistrationReturnedNullFromBuildExpression(
                    this.Registration));
            }

            var e = new ExpressionBuiltEventArgs(this.ServiceType, expression);

            e.Lifestyle = this.Lifestyle;
            e.InstanceProducer = this;
            e.ReplacedRegistration = this.Registration;

            this.Registration.Container.OnExpressionBuilt(e, this);

            if (!object.ReferenceEquals(this.Registration, e.ReplacedRegistration))
            {
                this.Registration = e.ReplacedRegistration;
            }
            else
            {
                this.overriddenLifestyle = e.Lifestyle;
            }

            return e.Expression;
        }