public override void PreBuildUp(IBuilderContext context)
        {
            var key = context.OriginalBuildKey;

            if (!(key.Type.IsInterface &&
                  _typeStacks.ContainsKey(key.Type)) ||
                context.GetOverriddenResolver(key.Type) != null)
            {
                return;
            }


            var stack = _typeStacks[key.Type];

            object value = null;

            while (stack.Count != 0)
            {
                var t = stack.Dequeue();
                value = context.NewBuildUp(t, key.Name);
                var overrides = new DependencyOverride(
                    key.Type, value);
                context.AddResolverOverrides(overrides);
            }

            context.Existing      = value;
            context.BuildComplete = true;
        }
Esempio n. 2
0
        public override void PreBuildUp(IBuilderContext context)
        {
            NamedTypeBuildKey key = context.OriginalBuildKey;

            if (!(key.Type.IsInterface && _typeStacks.ContainsKey(key.Type)))
            {
                return;
            }

            if (null != context.GetOverriddenResolver(key.Type))
            {
                return;
            }

            var    stack = new Stack <Type>(_typeStacks[key.Type]);
            object value = null;

            stack.ForEach(type =>
            {
                value         = context.NewBuildUp(new NamedTypeBuildKey(type, key.Name));
                var overrides = new DependencyOverride(key.Type, value);
                context.AddResolverOverrides(overrides);
            }
                          );

            context.Existing      = value;
            context.BuildComplete = true;
        }
Esempio n. 3
0
            public override void PreBuildUp(IBuilderContext context)
            {
                var key = context.OriginalBuildKey;

                if (!key.Type.IsInterface || context.GetOverriddenResolver(key.Type) != null)
                {
                    return;
                }

                Stack <Type> stack;

                if (!_stackDictionary.TryGetValue(key.Type, out stack))
                {
                    return;
                }

                object value = null;

                foreach (var t in stack)
                {
                    value = context.NewBuildUp(new NamedTypeBuildKey(t, key.Name));
                    var overrides = new DependencyOverride(key.Type, value);
                    context.AddResolverOverrides(overrides);
                }

                context.Existing      = value;
                context.BuildComplete = true;
            }
        public override void PreBuildUp(IBuilderContext context)
        {
            NamedTypeBuildKey key = context.OriginalBuildKey;

            if (!(key.Type.IsInterface && _typeStacks.ContainsKey(key.Type)))
            {
                return;
            }

            if (null != context.GetOverriddenResolver(key.Type))
            {
                return;
            }

            var stack = new Stack<Type>(_typeStacks[key.Type]);
            object value = null;
            stack.ForEach(type =>
            {
                value = context.NewBuildUp(new NamedTypeBuildKey(type, key.Name));
                var overrides = new DependencyOverride(key.Type, value);
                context.AddResolverOverrides(overrides);
            }
                );

            context.Existing = value;
            context.BuildComplete = true;
        }
        public void BuildUp(IBuilderContext context)
        {
            if (context.Existing == null)
            {
                var container = context.NewBuildUp <IUnityContainer>();
                context.AddResolverOverrides(new ParameterOverride("type", new InjectionParameter(context.BuildKey.Type)));

                if (!string.IsNullOrWhiteSpace(context.BuildKey.Name))
                {
                    context.AddResolverOverrides(new ParameterOverride("name", new InjectionParameter(context.BuildKey.Name)));
                }

                context.Existing = _factoryFunc.DynamicInvoke(_operations.Select(p => ResolveArgument(p, context, container))
                                                              .ToArray());

                DynamicMethodConstructorStrategy.SetPerBuildSingleton(context);
            }
        }
Esempio n. 6
0
 public override void PreBuildUp(IBuilderContext context)
 {
     if (context.BuildKey.Type == typeof(Logger))
     {
         var  policy = context.Policies.Get <ILoggerPolicy>(LoggerExtension.LoggerBuildKey);
         Type type   = policy.Pop();
         context.AddResolverOverrides(new ParameterOverride("type",
                                                            new InjectionParameter(typeof(Type), type)));
     }
 }
        public void BuildUp(IBuilderContext context)
        {
            if (context.Existing == null)
            {
                // Reserved type
                context.AddResolverOverrides(new ParameterOverride("type", new InjectionParameter(context.BuildKey.Type)));

                // Reserved name
                if (!string.IsNullOrWhiteSpace(context.BuildKey.Name))
                {
                    context.AddResolverOverrides(new ParameterOverride("name", new InjectionParameter(context.BuildKey.Name)));
                }

                context.Existing = _factoryFunc.DynamicInvoke(_operations.Select(p => ResolveArgument(p, context))
                                                              .ToArray());

                context.SetPerBuildSingleton();
            }
        }
 public override void PreBuildUp(IBuilderContext context)
 {
     var policy = context.Policies.Get<InterceptorPolicy>(context.BuildKey);
     if (policy != null)
     {
         ICollection<IDynamicInterceptor> interceptors = policy.RetrieveInterceptors(context);
         var dynamicInterceptorManager = new DynamicInterceptorManager(new DynamicInterceptorCollection(interceptors));
         context.AddResolverOverrides(new DependencyOverride<IDynamicInterceptorManager>(dynamicInterceptorManager));
     }
 }
        public override void PreBuildUp(IBuilderContext context)
        {
            var policy = context.Policies.Get <InterceptorPolicy>(context.BuildKey);

            if (policy != null)
            {
                ICollection <IDynamicInterceptor> interceptors = policy.RetrieveInterceptors(context);
                var dynamicInterceptorManager = new DynamicInterceptorManager(new DynamicInterceptorCollection(interceptors));
                context.AddResolverOverrides(new DependencyOverride <IDynamicInterceptorManager>(dynamicInterceptorManager));
            }
        }
Esempio n. 10
0
        /// <summary>
        /// Checks if resolvers need to be overriden.
        /// </summary>
        /// <param name="context">Context of the build operation.</param>
        public override void PreBuildUp(IBuilderContext context)
        {
            var typeToBuild = context.BuildKey.Type;

            //
            if (Logger.IsDebugEnabled)
            {
                Logger.Debug("StepScopeStrategy > PreBuildUp > typeToBuild :[{0}]", typeToBuild.FullName);
            }
            //
            if (typeToBuild.IsArray)
            {
                return;
            }

            var lifetimePolicy = context.Policies.GetNoDefault <ILifetimePolicy>(context.BuildKey, false);

            if (lifetimePolicy is StepScopeLifetimeManager)
            {
                // the object being built is in the step scope, we don't need proxies for its dependencies
                return;
            }


            // Constructor parameters resolvers
            var         constructorParameters = new Dictionary <string, StepScopeDependency>();
            IPolicyList resolverPolicyDestination;
            var         constructorSelector = context.Policies.Get <IConstructorSelectorPolicy>(context.BuildKey, out resolverPolicyDestination);
            var         constructor         = constructorSelector.SelectConstructor(context, resolverPolicyDestination);

            if (constructor != null)
            {
                ResolveConstructorParameters(constructor, constructorParameters);
            }

            // Properties resolvers
            var properties       = new Dictionary <string, StepScopeDependency>();
            var propertySelector = context.Policies.Get <IPropertySelectorPolicy>(context.BuildKey, out resolverPolicyDestination);

            ResolveProperties(context, propertySelector, resolverPolicyDestination, properties);

            // Method parameters resolvers
            var methodParameters = new Dictionary <Tuple <string, string>, IList <StepScopeDependency> >();
            var methodSelector   = context.Policies.Get <IMethodSelectorPolicy>(context.BuildKey, out resolverPolicyDestination);

            ResolveMethodParameters(context, methodSelector, resolverPolicyDestination, methodParameters);

            if (constructorParameters.Any() || properties.Any() || methodParameters.Any())
            {
                context.AddResolverOverrides(new StepScopeOverride(constructorParameters, properties, methodParameters));
            }
        }
        public override void PreBuildUp(IBuilderContext context)
        {
            Type typeToBuild = context.BuildKey.Type;

            if (typeToBuild.IsGenericType && typeof (IVisitor<>) == typeToBuild.GetGenericTypeDefinition())
            {
                AbstractVisitor abstractVisitor = new AbstractVisitor(context);

                context.Existing = abstractVisitor;

                context.AddResolverOverrides(new DependencyOverride(typeToBuild, abstractVisitor));
            }
        }
Esempio n. 12
0
        public object NewBuildUp(NamedTypeBuildKey newBuildKey)
        {
            this.ChildContext =
                new BuilderContext(chain, lifetime, persistentPolicies, policies, newBuildKey, null);

            ChildContext.AddResolverOverrides(Sequence.Collect(resolverOverrides));

            object result = this.ChildContext.Strategies.ExecuteBuildUp(this.ChildContext);

            this.ChildContext = null;

            return(result);
        }
Esempio n. 13
0
        /// <summary>
        /// A convenience method to do a new buildup operation on an existing context. This
        /// overload allows you to specify extra policies which will be in effect for the duration
        /// of the build.
        /// </summary>
        /// <param name="newBuildKey">Key defining what to build up.</param>
        /// <param name="childCustomizationBlock">A delegate that takes a <see cref="IBuilderContext"/>. This
        /// is invoked with the new child context before the build up process starts. This gives callers
        /// the opportunity to customize the context for the build process.</param>
        /// <returns>Created object.</returns>
        public object NewBuildUp(NamedTypeBuildKey newBuildKey, Action <IBuilderContext> childCustomizationBlock)
        {
            ChildContext =
                new BuilderContext(chain, lifetime, persistentPolicies, policies, newBuildKey, null);

            ChildContext.AddResolverOverrides(Sequence.Collect(resolverOverrides));

            childCustomizationBlock(ChildContext);

            object result = ChildContext.Strategies.ExecuteBuildUp(ChildContext);

            ChildContext = null;

            return(result);
        }
Esempio n. 14
0
        /// <summary>
        /// Checks if resolvers need to be overriden.
        /// </summary>
        /// <param name="context">Context of the build operation.</param>
        public override void PreBuildUp(IBuilderContext context)
        {
            var typeToBuild = context.BuildKey.Type;
            //
            if (Logger.IsDebugEnabled)
            {
                Logger.Debug("StepScopeStrategy > PreBuildUp > typeToBuild :[{0}]", typeToBuild.FullName);
            }
            //
            if (typeToBuild.IsArray)
            {
                return;
            }

            var lifetimePolicy = context.Policies.GetNoDefault<ILifetimePolicy>(context.BuildKey, false);
            if (lifetimePolicy is StepScopeLifetimeManager)
            {
                // the object being built is in the step scope, we don't need proxies for its dependencies
                return;
            }


            // Constructor parameters resolvers
            var constructorParameters = new Dictionary<string, StepScopeDependency>();
            IPolicyList resolverPolicyDestination;
            var constructorSelector = context.Policies.Get<IConstructorSelectorPolicy>(context.BuildKey, out resolverPolicyDestination);
            var constructor = constructorSelector.SelectConstructor(context, resolverPolicyDestination);
            if (constructor != null)
            {
                ResolveConstructorParameters(constructor, constructorParameters);
            }

            // Properties resolvers
            var properties = new Dictionary<string, StepScopeDependency>();
            var propertySelector = context.Policies.Get<IPropertySelectorPolicy>(context.BuildKey, out resolverPolicyDestination);
            ResolveProperties(context, propertySelector, resolverPolicyDestination, properties);

            // Method parameters resolvers
            var methodParameters = new Dictionary<Tuple<string, string>, IList<StepScopeDependency>>();
            var methodSelector = context.Policies.Get<IMethodSelectorPolicy>(context.BuildKey, out resolverPolicyDestination);
            ResolveMethodParameters(context, methodSelector, resolverPolicyDestination, methodParameters);

            if (constructorParameters.Any() || properties.Any() || methodParameters.Any())
            {
                context.AddResolverOverrides(new StepScopeOverride(constructorParameters, properties, methodParameters));
            }
        }
Esempio n. 15
0
        /// <summary>
        /// A convenience method to do a new buildup operation on an existing context. This
        /// overload allows you to specify extra policies which will be in effect for the duration
        /// of the build.
        /// </summary>
        /// <param name="newBuildKey">Key defining what to build up.</param>
        /// <param name="childCustomizationBlock">A delegate that takes a <see cref="IBuilderContext"/>. This
        /// is invoked with the new child context before the build up process starts. This gives callers
        /// the opportunity to customize the context for the build process.</param>
        /// <returns>Created object.</returns>
        public object NewBuildUp(NamedTypeBuildKey newBuildKey, Action<IBuilderContext> childCustomizationBlock)
        {
            ChildContext =
                new BuilderContext(chain, lifetime, persistentPolicies, policies, newBuildKey, null);

            ChildContext.AddResolverOverrides(Sequence.Collect(resolverOverrides));

            childCustomizationBlock(ChildContext);

            object result = ChildContext.Strategies.ExecuteBuildUp(ChildContext);

            ChildContext = null;

            return result;
        }
Esempio n. 16
0
        public object NewBuildUp(NamedTypeBuildKey newBuildKey)
        {
            this.ChildContext =
                new BuilderContext(chain, lifetime, persistentPolicies, policies, newBuildKey, null);

            ChildContext.AddResolverOverrides(Sequence.Collect(resolverOverrides));

            object result = this.ChildContext.Strategies.ExecuteBuildUp(this.ChildContext);

            this.ChildContext = null;

            return result;
        }
Esempio n. 17
0
        public static void AddResolverOverrides(this IBuilderContext context, params ResolverOverride[] overrides)
        {
            Guard.ArgumentNotNull(context, "context");

            context.AddResolverOverrides(overrides);
        }
 /// <summary>
 /// Add a set of <see cref="ResolverOverride"/>s to the context, specified as a
 /// variable argument list.
 /// </summary>
 /// <param name="context">Context to add overrides to.</param>
 /// <param name="overrides">The overrides.</param>
 public static void AddResolverOverrides(this IBuilderContext context, params ResolverOverride[] overrides)
 {
     context.AddResolverOverrides(overrides);
 }