Mega Code Archive

 
Categories / C# / Reflection
 

Detects whether an assembly is implementing a specific interface or not

using System; using System.IO; using System.Reflection; namespace ExplorerPlus.Utilities {     public static class PluginManager     {         /// <summary>         /// Detects whether an assembly is implementing a specific interface or not.         /// </summary>         /// <param name="interfaceName">The String containing the name of the interface to get. For generic interfaces, this is the mangled name.</param>         /// <param name="assemblyFile">The name or path of the file that contains the manifest of the assembly.</param>         /// <returns>true if one of the assembly classes implements the specified interface; otherwise, false.</returns>         public static bool IsInterfaceImplemented(string interfaceName, string assemblyFile)         {             // ensure interface name is not null             if (interfaceName != string.Empty && interfaceName != null && interfaceName.Length > 0)             {                 // check if assembly file exists                 if (File.Exists(assemblyFile))                 {                     //Create a new assembly from the plugin file                      Assembly pluginAssembly = Assembly.LoadFrom(assemblyFile);                     //Next we'll loop through all the Types found in the assembly                     foreach (Type pluginType in pluginAssembly.GetTypes())                     {                         if (pluginType.IsPublic) //Only look at public types                         {                             if (!pluginType.IsAbstract)  //Only look at non-abstract types                             {                                 //Gets a type object of the interface we need the plugins to match                                 Type typeInterface = pluginType.GetInterface(interfaceName, true);                                 //Make sure the interface we want to use actually exists                                 if (typeInterface != null)                                 {                                     return true;                                 }                             }                         }                     }                 }             }             return false;         }     } }