Note that there are some explanatory texts on larger screens.

plurals
  1. POPlugin Architecture with Interfaces; Interface check doesn't work
    primarykey
    data
    text
    <p>I am implementing a simple plugin architecture in an application. The plugin requirements are defined using an interface (IPlugin) that is in a *.dll that is referenced by the application and the plugin. The application has a plugin manager (also in the same *.dll) which loads the plugins by looking for all the *.dll's in a plugins folder, loads them, then checks that the plugin implements the interface. I have done this checking two different ways [previously by a simple if (plugin is IPlugin)], but neither one will recognize when a plugin implements the interface. Here's the code:</p> <pre><code>Assembly pluginAssembly = Assembly.LoadFrom(currFile.FullName); if (pluginAssembly != null) { foreach (Type currType in pluginAssembly.GetTypes()) { if (currType.GetInterfaces().Contains(typeof(IPlugin))) { // Code here is never executing // even when the currType derives from IPlugin } } } </code></pre> <p>I used to test a particular class name ("Plugin"), but then I allowed it to cycle through all the classes in the assembly to no avail. (This follows an example that I found elsewhere.) To make this a little more complicated, there are two interfaces each of which implements the original interface (IPluginA, IPluginB). The plugin actually implements one of the more specific interfaces (IPluginB). However, I have tried it with the plugin just implementing the more general interface (IPlugin), and this still does not work.</p> <p>[Edit: in response to the two responses that I first received] Yes, I have tried using IsAssignableFrom. See the following:</p> <pre><code>Assembly pluginAssembly = Assembly.LoadFrom(currFile.FullName); if (pluginAssembly != null) { foreach (Type currType in pluginAssembly.GetTypes()) { if (typeof(IPlugin).IsAssignableFrom(currType)) { string test = "test"; } } } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload