Wenn Du zum Beispiel in einer WPF-Anwendung Module inklusive Forms et cetera nachladen möchtest (Host -> Plugins), kann ich Dir Composite Application Guidance for WPF (ehemals Prism) von Microsoft empfehlen.
Ganz billig geht das Nachladen immer noch mit Assembly.Load() aus System.Reflection.
Du definierst ein allgemeines Interface fuer deine Plugins. Lagerst die eigentliche Implementation in Bibliotheken aus. Fuegst eine Factoryfunktion fuer die Erzeugung und Vernichtung deines Pluginobjektes der Bibliothek hinzu. Laedst Bibliothek mit Plugin zur Laufzeit. Erzeugst ueber die Factoryfunktion das Pluginobjekt ... und benutzt es ganz normal.
Das kann man auch gut mit einer Scriptsprache wie Lua verbinden, so dass das Plugin sich automatisch mit seinen Funktionen am Laufzeitsystem registriert. So braucht man nur ein minimales Interface zu kennen (die Registrierungsfunktionen) und kann Objekte erzeugen, vernichten naja, alles was das Objekt durch die registrierten Funktionen zulaesst, ohne jemals die Headerdatei der Klasse (oder entsprechenden Interfaces) in sein Projekt eingebunden zu haben.