Esempio n. 1
0
                    private List <object> GetConstructorParameters(IBuilderContext context)
                    {
                        var             parameters  = new List <object>();
                        var             policy      = new DefaultUnityConstructorSelectorPolicy();
                        var             constructor = policy.SelectConstructor(context);
                        ConstructorInfo constructorInfo;

                        if (constructor == null)
                        {
                            // Unit constructor selector doesn't seem to want to find abstract class protected constructors
                            // quickly find one here...
                            var buildKey           = (NamedTypeBuildKey)context.BuildKey;
                            var largestConstructor = buildKey.Type.GetConstructors(
                                BindingFlags.Public |
                                BindingFlags.NonPublic |
                                BindingFlags.Instance)
                                                     .OrderByDescending(o => o.GetParameters().Length)
                                                     .FirstOrDefault();

                            constructorInfo = largestConstructor;
                        }
                        else
                        {
                            constructorInfo = constructor.Constructor;
                        }

                        foreach (var parameterInfo in constructorInfo.GetParameters())
                        {
                            parameters.Add(_container.Resolve(parameterInfo.ParameterType));
                        }

                        return(parameters);
                    }
Esempio n. 2
0
        /// <summary>
        /// Choose the constructor to call for the given type.
        /// </summary>
        /// <param name="context">Current build context</param>
        /// <param name="resolverPolicyDestination">
        /// The Microsoft.Practices.ObjectBuilder2.IPolicyList to add any generated resolver objects into.
        /// </param>
        /// <returns>The chosen constructor.</returns>
        public SelectedConstructor SelectConstructor(IBuilderContext context, IPolicyList resolverPolicyDestination)
        {
            ConstructorInfo ctor = FindDependencyConstructor <DependencyAttribute>(context);

            if (ctor != null)
            {
                return(CreateSelectedConstructor(ctor, context));
            }
            return(_dependency.SelectConstructor(context, resolverPolicyDestination));
        }