Вот что я нашел, надеюсь, это поможет вам копать дальше:
var unspecificMethodType = typeof(Program).GetMethod("GetById", new[] { typeof(Guid?), typeof(IValidator<>), typeof(HttpStatusCode) });
unspecificMethodType.Dump(); // null
var method = typeof(Program).GetMethods()
.Where(m => m.Name == "GetById")
.First();
var methodGenericType = method.GetGenericArguments()[0];
methodGenericType.Dump(); // T
var specificMethodType = typeof(Program).GetMethod("GetById", new[] { typeof(Guid?), typeof(IValidator<>).MakeGenericType(methodGenericType), typeof(HttpStatusCode) });
specificMethodType.Dump(); // GetById (Guid? id, IValidator<T> validator, HttpStatusCode statusCode
Из того, что я вижу, проблема может быть выделена этим тестом:
var paramType = method.GetParameters()[1].ParameterType;
paramType.Dump(); // Program+IValidator`1[T]
(paramType == typeof(IValidator<>)).Dump(); // false