Skip to content

Getting Started

Marcus Ackre Medina edited this page Jul 20, 2026 · 2 revisions

Getting Started

Install

dotnet add package MarcusMedina.Reflection.ClassEnumerator

Requires .NET 10+

By interface

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();

By inheritance

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 name

With caching

Reflection is expensive. Enable the cache when scanning the same assembly repeatedly:

var commands = EnumerateClasses<ICommand>.GetClassesByInterface(useCache: true);

Scan a specific assembly

var asm = Assembly.LoadFrom("MyPlugin.dll");
var plugins = EnumerateClasses<IPlugin>.GetClassesByInterface(assembly: asm);

Clone this wiki locally