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)); }