Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
Call generic implementation of method using Reflection
void Main()
GetPersisterFor(new Foo());
public interface IPersister { }
public interface IEntity { }
public class Foo : IEntity { }
public class Bar : IEntity { }
public IPersister GetPersisterFor(IEntity entity)
Console.WriteLine("Call GetPersisterFor(IEntity entity)");
MethodInfo getPersisterForGenericMethod =
// iterate over all methods to find proper generic implementation
.Single(methodInfo => methodInfo.Name == "GetPersisterFor" && methodInfo.IsGenericMethod)
// supply it with generic type parameter
// invoke it
return getPersisterForGenericMethod.Invoke(this, null) as IPersister;
public IPersister GetPersisterFor<TEntity>() where TEntity : IEntity
Console.WriteLine("Call GetPersisterFor<TEntity>");
return null;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment