Пример #1
0
        protected override Expression GetExpressionInternal(IContainerContext containerContext, IServiceRegistration serviceRegistration, ResolutionContext resolutionContext, Type resolveType)
        {
            if (!containerContext.ContainerConfigurator.ContainerConfiguration.CircularDependencyTrackingEnabled)
            {
                return(this.PrepareExpression(containerContext, serviceRegistration, resolutionContext, resolveType));
            }

            if (resolutionContext.GetCircularDependencyBarrier(serviceRegistration.RegistrationNumber))
            {
                throw new CircularDependencyException(resolveType);
            }

            resolutionContext.SetCircularDependencyBarrier(serviceRegistration.RegistrationNumber, true);
            var result = this.PrepareExpression(containerContext, serviceRegistration, resolutionContext, resolveType);

            resolutionContext.SetCircularDependencyBarrier(serviceRegistration.RegistrationNumber, false);
            return(result);
        }