Thanks for the reply "PhillipHamlyn" but I can already load the classes and such within the plugins into my program so there is no need for external libraries, I simply want some input regarding how I should have the structure.
API.dll references Program.exe
Default.dll references API.dll
Program.exe loads all 'Plugins/*.dll' and pulls the classes from the plugins storing there types.
Program.exe then when in need of using the plugin types does "IMyPluginBaseType TheCreatedClass = (IMyPluginBaseType) Assembly.CreateInstance( Type.FullName );"
I store the data as such, Dictionary<String,Type>; The string being a unique id generated when the type is parsed from the dll.
Currently I have Program.exe and Default.dll referencing API.dll as it's the easier meens of doing things.