The mono assembly loader EPluginMono implements a concrete EPlugin type which loads C# assemblies using Mono. Apart from loading the assembly, it can optionally instantiate a class to implement the callback or invoke static methods directly.
The mono assembly loader needs the name of the assembly and optionally the name of the class for handling the callbacks.
<e-plugin ... type="mono" location="/full/path/name.dll" handler="PluginClass" ? ... <hook class="..."> ... </e-plugin>
If supplied, the handler contains the fully qualified name of the class which handles all callbacks for this plugin. If a handling class is used, then the function specifications become relative to this class.
This class will be instantiated once upon the first callback invocation, and remain active for the life of the plugin (or application).
If no handler class is specified, then the function specification must match a static method in the assembly. This is passed to mono_method_desc_new and mono_method_desc_search_in_image, typically FunctionName(intptr).
If the handler is specified, then the function specification is relative to the handler class. This is passed to mono_method_desc_new and mono_method_desc_search_in_class, typically :MethodName(intptr).
IntPtr function(data);
IntPtr data;