Instantiating classes that implement an C# with Example



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

0 Comment's

Comment Form

Submit Comment