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;
        }
        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;
        }
Пример #3
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;
        }
Пример #4
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;
            }
Пример #5
0
        /// <summary>
        /// Helper method used by generated IL to look up a dependency resolver based on the given key.
        /// </summary>
        /// <param name="context">Current build context.</param>
        /// <param name="dependencyType">Type of the dependency being resolved.</param>
        /// <param name="resolver">The configured resolver.</param>
        /// <returns>The found dependency resolver.</returns>
        public static IDependencyResolverPolicy GetResolver(IBuilderContext context, Type dependencyType, IDependencyResolverPolicy resolver)
        {
            Guard.ArgumentNotNull(context, "context");

            var overridden = context.GetOverriddenResolver(dependencyType);
            return overridden ?? resolver;
        }
Пример #6
0
        public static IEnumerable <object> ResolveConstructorScopedArguments(this IBuilderContext context)
        {
            var constructor = context.SelectConstructor();

            if (constructor == null)
            {
                throw new InvalidOperationException("Call after TypeMapping Stage.");
            }

            var operation = context.CurrentOperation;

            foreach (var p in constructor.Constructor.FindScopedParameters())
            {
                context.CurrentOperation = new MethodArgumentResolveOperation(p.ParameterType, null, p.Name);
                yield return(context.GetOverriddenResolver(context.BuildKey.Type).Resolve(context));
            }
            context.CurrentOperation = operation;
        }
        private static object ResolveArgument(BuildOperation operation, IBuilderContext context)
        {
            try
            {
                context.CurrentOperation = operation;
                var policy = context.GetOverriddenResolver(typeof(ParameterOverride));

                return(null != policy?policy.Resolve(context)
                           : context.Container.Resolve(operation.TypeBeingConstructed));
            }
            catch (Exception e)
            {
                throw new ResolutionFailedException(operation.TypeBeingConstructed,
                                                    (operation as ParameterResolveOperation)?.ParameterName,
                                                    e, context, Constants.FactoryResolutionFailed);
            }
            finally
            {
                context.CurrentOperation = null;
            }
        }
Пример #8
0
        private static object ResolveArgument(BuildOperation operation, IBuilderContext context, IUnityContainer container)
        {
            try
            {
                context.CurrentOperation = operation;
                var policy = context.GetOverriddenResolver(typeof(ParameterOverride));

                return(null != policy
                    ? policy.Resolve(context)
                    : container.Resolve(operation.TypeBeingConstructed));
            }
            catch
            {
                // ignored
            }
            finally
            {
                context.CurrentOperation = null;
            }

            return(GetDefaultValue(operation.TypeBeingConstructed));
        }
        /// <summary>
        /// Helper method used by generated IL to look up a dependency resolver based on the given key.
        /// </summary>
        /// <param name="context">Current build context.</param>
        /// <param name="dependencyType">Type of the dependency being resolved.</param>
        /// <param name="resolver">The configured resolver.</param>
        /// <returns>The found dependency resolver.</returns>
        public static IDependencyResolverPolicy GetResolver(IBuilderContext context, Type dependencyType, IDependencyResolverPolicy resolver)
        {
            Guard.ArgumentNotNull(context, "context");

            var overridden = context.GetOverriddenResolver(dependencyType);
            return overridden ?? resolver;
        }
        public static IDependencyResolverPolicy GetResolver(IBuilderContext context, Type dependencyType, string resolverKey)
        {
            Guard.ArgumentNotNull(context, "context");

            var resolver = context.GetOverriddenResolver(dependencyType);
            return resolver ?? context.Policies.Get<IDependencyResolverPolicy>(resolverKey);
        }
        /// <summary>
        /// Helper method used by generated IL to look up a dependency resolver based on the given key.
        /// </summary>
        /// <param name="context">Current build context.</param>
        /// <param name="dependencyType">Type of the dependency being resolved.</param>
        /// <param name="resolverKey">Key the resolver was stored under.</param>
        /// <returns>The found dependency resolver.</returns>
        public static IDependencyResolverPolicy GetResolver(IBuilderContext context, Type dependencyType, string resolverKey)
        {
            var resolver = context.GetOverriddenResolver(dependencyType);

            return(resolver ?? context.Policies.Get <IDependencyResolverPolicy>(resolverKey));
        }