public IEnumerable <ActionCall> FindActions(TypePool types) { var awesomeEntities = types.EntityTypes(); var openHandlers = new[] { typeof(RestfulCreateHandler <>), typeof(RestfulPatchHandler <>), typeof(RestfulDeleteHandler <>), typeof(RestfulFindHandler <>), typeof(RestfulIndexHandler <>), typeof(AwesomeCreateHandler <>), typeof(AwesomeEditHandler <>) }; foreach (var awesomeEntity in awesomeEntities) { foreach (var openHandler in openHandlers) { var closedHandler = openHandler.MakeGenericType(awesomeEntity); var closedMethod = closedHandler.GetMethod("Execute", BindingFlags.Public | BindingFlags.Instance); //should drive from RestfulHandler guard(closedHandler, closedMethod); yield return(new ActionCall(closedHandler, closedMethod)); } } }