Yes, you need to get the definition of the general method. Then you can use MethodInfo.MakeGenericMethod to create a common method.
So something like:
MethodInfo genericMethodDefinition = GetType() .GetMethods(BindingFlags.Instance | BindingFlags.NonPublic) .Where(method => method.IsGenericMethod && method.Name == "GetPersisterFor") .First(); // OR MethodInfo genericMethodDefinition = GetType().GetMethod("GetPersisterFor", BindingFlags.Instance | BindingFlags.NonPublic, null, Type.EmptyTypes, null); // THEN MethodInfo genericMethod = genericMethodDefinition.MakeGenericMethod(entity.GetType()); genericMethod.Invoke(this, null); == "GetPersisterFor") MethodInfo genericMethodDefinition = GetType() .GetMethods(BindingFlags.Instance | BindingFlags.NonPublic) .Where(method => method.IsGenericMethod && method.Name == "GetPersisterFor") .First(); // OR MethodInfo genericMethodDefinition = GetType().GetMethod("GetPersisterFor", BindingFlags.Instance | BindingFlags.NonPublic, null, Type.EmptyTypes, null); // THEN MethodInfo genericMethod = genericMethodDefinition.MakeGenericMethod(entity.GetType()); genericMethod.Invoke(this, null); ( "GetPersisterFor", MethodInfo genericMethodDefinition = GetType() .GetMethods(BindingFlags.Instance | BindingFlags.NonPublic) .Where(method => method.IsGenericMethod && method.Name == "GetPersisterFor") .First(); // OR MethodInfo genericMethodDefinition = GetType().GetMethod("GetPersisterFor", BindingFlags.Instance | BindingFlags.NonPublic, null, Type.EmptyTypes, null); // THEN MethodInfo genericMethod = genericMethodDefinition.MakeGenericMethod(entity.GetType()); genericMethod.Invoke(this, null); ); MethodInfo genericMethodDefinition = GetType() .GetMethods(BindingFlags.Instance | BindingFlags.NonPublic) .Where(method => method.IsGenericMethod && method.Name == "GetPersisterFor") .First(); // OR MethodInfo genericMethodDefinition = GetType().GetMethod("GetPersisterFor", BindingFlags.Instance | BindingFlags.NonPublic, null, Type.EmptyTypes, null); // THEN MethodInfo genericMethod = genericMethodDefinition.MakeGenericMethod(entity.GetType()); genericMethod.Invoke(this, null);
source share