in src/React.Core/TinyIoC/TinyIoC.cs [581:609]
private static MethodInfo GetMethod(Type sourceType, BindingFlags bindingFlags, string methodName, Type[] genericTypes, Type[] parameterTypes)
{
#if GETPARAMETERS_OPEN_GENERICS
var methods =
sourceType.GetMethods(bindingFlags).Where(
mi => string.Equals(methodName, mi.Name, StringComparison.Ordinal)).Where(
mi => mi.ContainsGenericParameters).Where(mi => mi.GetGenericArguments().Length == genericTypes.Length).
Where(mi => mi.GetParameters().Length == parameterTypes.Length).Select(
mi => mi.MakeGenericMethod(genericTypes)).Where(
mi => mi.GetParameters().Select(pi => pi.ParameterType).SequenceEqual(parameterTypes)).ToList();
#else
var validMethods = from method in sourceType.GetMethods(bindingFlags)
where method.Name == methodName
where method.IsGenericMethod
where method.GetGenericArguments().Length == genericTypes.Length
let genericMethod = method.MakeGenericMethod(genericTypes)
where genericMethod.GetParameters().Count() == parameterTypes.Length
where genericMethod.GetParameters().Select(pi => pi.ParameterType).SequenceEqual(parameterTypes)
select genericMethod;
var methods = validMethods.ToList();
#endif
if (methods.Count > 1)
{
throw new AmbiguousMatchException();
}
return methods.FirstOrDefault();
}