static void Main(string[] args) { var request = new MyRequest(); IMediator mediator = new Mediator(); var type = request.GetType(); var method = mediator.GetType().GetMethod("Send"); var responseType = type.GetInterfaces() .Single(i => i.GetGenericTypeDefinition() == typeof(IRequest <>)) .GetGenericArguments() .Single(); var generic = method.MakeGenericMethod(responseType); //Exception var response = generic.Invoke(mediator, new object[] { request }); }