public static void Main()
var notify = new Notify();
var notifyType = notify.GetType();
foreach (var iFace in notifyType.GetInterfaces())
if (iFace.IsGenericType && iFace.GetGenericTypeDefinition() == typeof (INotify<>))
typeof (Program).GetMethod("NotifyStuff").MakeGenericMethod(iFace.GetGenericArguments()).Invoke(null, new object[]{notify});
public static void NotifyStuff<T>(INotify<T> notify)where T : IFoo, IBar
Console.WriteLine(notify.FooBar.Something + " " + notify.FooBar.SomethingElse);
public class FooBarClass : IFoo, IBar
public string SomethingElse
public class Notify : INotify<FooBarClass>
FooBar = new FooBarClass();
public FooBarClass FooBar
public interface INotify<T>