Exemple #1
0
        /// <summary>
        /// Choose the constructor to call for the given type.
        /// </summary>
        /// <param name="context">Current build context</param>
        /// <param name="resolverPolicyDestination">The <see cref='IPolicyList'/> to add any
        /// generated resolver objects into.</param>
        /// <returns>The chosen constructor.</returns>
        public SelectedConstructor SelectConstructor(IBuilderContext context, IPolicyList resolverPolicyDestination)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }
            var typeToConstruct     = context.BuildKey.Type;
            var constructors        = typeToConstruct.GetConstructors();
            var selectedConstructor =
                SelectConstructor(constructors.Where(ctor => ctor.IsDefined(typeof(InjectionAttribute), true)).ToArray()) ??
                SelectConstructor(constructors.Where(ctor => ctor.IsDefined(typeof(InjectionConstructorAttribute), true)).ToArray()) ??
                SelectConstructor(constructors);

            if (selectedConstructor != null)
            {
                var result = new SelectedConstructor(selectedConstructor);
                foreach (var parameter in selectedConstructor.GetParameters())
                {
                    var attrs = parameter.GetCustomAttributes <DependencyResolutionAttribute>(false).ToArray();
                    if (attrs.Length > 0)
                    {
                        // Since this attribute is defined with MultipleUse = false, the compiler will
                        // enforce at most one. So we don't need to check for more.
                        result.AddParameterResolver(attrs[0].CreateResolver(parameter.ParameterType));
                    }
                    else
                    {
                        // No attribute, just go back to the container for the default for that type.
                        result.AddParameterResolver(new NamedTypeDependencyResolverPolicy(parameter.ParameterType, null));
                    }
                }
                return(result);
            }
            return(null);
        }
            public SelectedConstructor SelectConstructor(IBuilderContext context, IPolicyList resolverPoliciesDestination)
            {
                var selectedConstructor = new SelectedConstructor(typeof(T).GetConstructor(new[] { typeof(object) }));

                selectedConstructor.AddParameterResolver(this.parameterResolverPolicy);

                return(selectedConstructor);
            }
Exemple #3
0
            public SelectedConstructor SelectConstructor(IBuilderContext context, IPolicyList resolverPoliciesDestination)
            {
                var ctr = typeof(InjectedObject).GetMatchingConstructor(new[] { typeof(object) });
                var selectedConstructor = new SelectedConstructor(ctr);

                selectedConstructor.AddParameterResolver(this.resolverPolicy);

                return(selectedConstructor);
            }
Exemple #4
0
        private SelectedConstructor CreateSelectedConstructor(ConstructorInfo ctor, IBuilderContext context)
        {
            var result = new SelectedConstructor(ctor);

            foreach (ParameterInfo param in ctor.GetParameters())
            {
                result.AddParameterResolver(param.HasDefaultValue ? context.Container.CanResolve(param.ParameterType)? ResolveParameter(param): new LiteralValueDependencyResolverPolicy(null) : ResolveParameter(param));
            }
            return(result);
        }
        private SelectedConstructor CreateSelectedConstructor(ConstructorInfo ctor)
        {
            var result = new SelectedConstructor(ctor);

            foreach (ParameterInfo param in ctor.GetParameters())
            {
                result.AddParameterResolver(ResolveParameter(param));
            }
            return(result);
        }
        private SelectedConstructor CreateSelectedConstructor(IBuilderContext context, ConstructorInfo ctor)
        {
            SelectedConstructor selectedConstructor = new SelectedConstructor(ctor);

            foreach (ParameterInfo parameter in ctor.GetParameters())
            {
                selectedConstructor.AddParameterResolver(this.CreateResolver(context, ctor, parameter));
            }
            return(selectedConstructor);
        }
Exemple #7
0
            private static SelectedConstructor FindNewConstructor(SelectedConstructor originalConstructor, Type interceptingType)
            {
                ParameterInfo[] originalParams = originalConstructor.Constructor.GetParameters();

                ConstructorInfo newConstructorInfo =
                    interceptingType.GetConstructor(originalParams.Select(pi => pi.ParameterType).ToArray());

                SelectedConstructor newConstructor = new SelectedConstructor(newConstructorInfo);

                foreach (IDependencyResolverPolicy resolver in originalConstructor.GetParameterResolvers())
                {
                    newConstructor.AddParameterResolver(resolver);
                }

                return(newConstructor);
            }
            public SelectedConstructor SelectConstructor(IBuilderContext context, IPolicyList resolverPoliciesDestination)
            {
                var ctr = typeof(InjectedObject).GetMatchingConstructor(new[] { typeof(object) });
                var selectedConstructor = new SelectedConstructor(ctr);
                selectedConstructor.AddParameterResolver(this.resolverPolicy);

                return selectedConstructor;
            }