Ejemplo n.º 1
0
        protected ServiceTypeDecoratorInfo GetServiceTypeInfo(Expression originalExpression,
                                                              InstanceProducer registeredProducer, Func <Type, InstanceProducer> producerBuilder)
        {
            Type registeredServiceType = registeredProducer.ServiceType;

            var predicateCache = this.ThreadStaticServiceTypePredicateCache;

            if (!predicateCache.ContainsKey(registeredProducer))
            {
                Type implementationType =
                    ExtensionHelpers.DetermineImplementationType(originalExpression, registeredProducer);

                var producer = producerBuilder(implementationType);

                predicateCache[registeredProducer] =
                    new ServiceTypeDecoratorInfo(registeredServiceType, implementationType, producer);
            }

            return(predicateCache[registeredProducer]);
        }
Ejemplo n.º 2
0
        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);

                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());
        }
Ejemplo n.º 3
0
        protected Registration CreateRegistration(Type serviceType, ConstructorInfo decoratorConstructor,
                                                  Expression decorateeExpression, InstanceProducer realProducer, ServiceTypeDecoratorInfo info)
        {
            var overriddenParameters = this.CreateOverriddenParameters(serviceType, decoratorConstructor,
                                                                       decorateeExpression, realProducer, info);

            return(this.Lifestyle.CreateRegistration(serviceType,
                                                     decoratorConstructor.DeclaringType, this.Container,
                                                     overriddenParameters));
        }