示例#1
0
        private static IMethod <ConstructorInfo> SelectConstructor(IBuildContext buildContext, TypeDescriptor typeDescriptor, IAutowiringStrategy autoWiringStrategy)
        {
            var constructors = (IEnumerable <IMethod <ConstructorInfo> >)typeDescriptor
                               .GetDeclaredConstructors()
                               .Where(method => !method.IsStatic && (method.IsAssembly || method.IsPublic))
                               .Select(info => new Method <ConstructorInfo>(info));

            if (autoWiringStrategy.TryResolveConstructor(buildContext.Container, constructors, out var ctor))
            {
                return(ctor);
            }

            if (DefaultAutowiringStrategy.Shared != autoWiringStrategy && DefaultAutowiringStrategy.Shared.TryResolveConstructor(buildContext.Container, constructors, out ctor))
            {
                return(ctor);
            }

            return(buildContext.Container.Resolve <ICannotResolveConstructor>().Resolve(buildContext, constructors));
        }