Your application’s plugin loader would find the dll files, get all types in those assemblies that implement IPlugin, and create instances of those.

publicIEnumerable<IPlugin>InstantiatePlugins(stringdirectory){varpluginAssemblyNames=Directory.GetFiles(directory,"*.addin.dll").Select(name=>newFileInfo(name).FullName).ToArray();//load the assemblies into the current AppDomain, so we can instantiate the types later
foreach(varfileNameinpluginAssemblyNames)AppDomain.CurrentDomain.Load(File.ReadAllBytes(fileName));varassemblies=pluginAssemblyNames.Select(System.Reflection.Assembly.LoadFile);vartypesInAssembly=assemblies.SelectMany(asm=>asm.GetTypes());varpluginTypes=typesInAssembly.Where(type=>typeof(IPlugin).IsAssignableFrom(type));returnpluginTypes.Select(Activator.CreateInstance).Cast<IPlugin>();}