private CipherSuitePlugin[] FindCipherSuitePlugins(string path)
{
List <CipherSuitePlugin> pluginList = new List <CipherSuitePlugin>();
foreach (string fileName in Directory.GetFiles(path))
{
FileInfo fileInfo = new FileInfo(fileName);
if (!fileInfo.Extension.ToLower().Equals(".dll"))
{
continue;
}
Assembly pluginAssembly = Assembly.LoadFrom(fileName);
foreach (Type pluginType in pluginAssembly.GetTypes())
{
if (!pluginType.IsPublic || pluginType.IsAbstract)
{
continue;
}
/* Check that the correct interface exists with this type */
Type cipherSuitePluginType = typeof(CipherSuitePlugin);
if (!pluginType.IsSubclassOf(cipherSuitePluginType))
{
continue;
}
CipherSuitePlugin plugin = (CipherSuitePlugin)Activator.CreateInstance(pluginType);
Console.WriteLine("Adding plugin: " + plugin.ToString());
pluginList.Add(plugin);
}
}
return(pluginList.ToArray());
}