Repository navigation
Getting Started
Marcus Ackre Medina edited this page Jul 20, 2026
·
2 revisions
dotnet add package MarcusMedina.Reflection.ClassEnumeratorRequires .NET 10+
using MarcusMedinaPro.ClassEnumerator;
public interface ICommand { void Execute(); }
public class SaveCommand : ICommand { public void Execute() => Console.WriteLine("Saving…"); }
public class QuitCommand : ICommand { public void Execute() => Environment.Exit(0); }
// Discovers SaveCommand and QuitCommand automatically
var commands = EnumerateClasses<ICommand>.GetClassesByInterface();
foreach (var cmd in commands) cmd.Execute();public abstract class BaseHandler { public abstract string Name { get; } }
public class AuthHandler : BaseHandler { public override string Name => "Auth"; }
public class LogHandler : BaseHandler { public override string Name => "Log"; }
var handlers = EnumerateClasses<BaseHandler>.GetClassesByInheritance();
// [AuthHandler, LogHandler] — sorted by type nameReflection is expensive. Enable the cache when scanning the same assembly repeatedly:
var commands = EnumerateClasses<ICommand>.GetClassesByInterface(useCache: true);var asm = Assembly.LoadFrom("MyPlugin.dll");
var plugins = EnumerateClasses<IPlugin>.GetClassesByInterface(assembly: asm);