public static final FieldObjectInstantiator getResolver(final Class<?> field_origin, final Class<?> resolver_enclosing_class, final String resolver_function) throws NoSuchMethodException {
		if (resolver_function == null) {
			return getDefaultInstantiator(field_origin);
		} else {
			for (final Method method : ReflectionUtil.getVisibleMethods(resolver_enclosing_class, VisibilityConstraint.INHERITED_CLASS_VIEWPOINT, resolver_function, null, (Class<?>[]) null)) {
				if (isFullArgumentsMethod(method)) {
					if (method.getReturnType().equals(Class.class)) {
						return new InstantiatorWithConcreteClassResolver_FullArguments(method);
					} else {
						return new WrappedInstantiator_FullArguments(method);
					}
				} else if (method.getParameterTypes().length == 0) {
					if (method.getReturnType().equals(Class.class)) {
						return new InstantiatorWithConcreteClassResolver(method);
					} else {
						return new WrappedInstanceResolver(method);
					}
				}
			}
			
			throw new NoSuchMethodException("No applicable method " + resolver_function + " is found");
		}
	}