Instantiating classes that implement an C# with Example
interface (e.g. plugin activation) If you want your application to support a plug-in system, for example to load plug-ins from assemblies located in plugins folder: interface IPlugin { string PluginDescription { get; } void DoWork(); } This class would be located in a separate dll class HelloPlugin : IPlugin { public string PluginDescription => "A plugin that says Hello"; public void DoWork() { Console.WriteLine("Hello"); } } Your application's plugin loader would find the dll files, get all types in those assemblies that implement IPlugin, and create instances of those. public IEnumerable InstantiatePlugins(string directory) { var pluginAssemblyNames = Directory.GetFiles(directory, "*.addin.dll").Select(name => new FileInfo(name).FullName).ToArray(); //load the assemblies into the current AppDomain, so we can instantiate the types later foreach (var fileName in pluginAssemblyNames) AppDomain.CurrentDomain.Load(File.ReadAllBytes(fileName)); var assemblies = pluginAssemblyNames.Select(System.Reflection.Assembly.LoadFile); var typesInAssembly = assemblies.SelectMany(asm => asm.GetTypes()); var pluginTypes = typesInAssembly.Where(type => typeof (IPlugin).IsAssignableFrom(type)); return pluginTypes.Select(Activator.CreateInstance).Cast(); }