Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- namespace HostApplications
- {
- public class MainClass
- {
- private static void TestWithAdapter()
- {
- var plugin = GenericAdapter.LoadPlugin("TestLib", "TestLib.MyPlugin");
- Console.WriteLine("Plugin={0}", plugin.Name);
- GenericAdapter.Unload();
- }
- public static void Main()
- {
- TestWithAdapter();
- }
- }
- }
- namespace PluginContracts
- {
- public interface IPlugin
- {
- string Name { get; }
- }
- }
- namespace TestLib
- {
- public class MyPlugin : MarshalByRefObject, IPlugin
- {
- public string Name
- {
- get { return "MyPlugin"; }
- }
- }
- }
- namespace PluginAdapter
- {
- public class GenericAdapter
- {
- private static AppDomain PluginDomain = null;
- public static IPlugin Plugin;
- public static void Unload()
- {
- Console.WriteLine("Unloading domain: {0}", PluginDomain.FriendlyName);
- AppDomain.Unload(PluginDomain);
- }
- public static IPlugin LoadPlugin(string assemblyName, string typeName)
- {
- if (PluginDomain == null)
- PluginDomain = AppDomain.CreateDomain("plugins");
- try
- {
- Plugin = (IPlugin)PluginDomain.CreateInstanceAndUnwrap(assemblyName, typeName);
- Log.LogLoadedAssemblies(PluginDomain);
- Console.WriteLine();
- Log.LogLoadedAssemblies();
- }
- catch (Exception ex)
- {
- Log.LogException(ex);
- }
- finally
- {
- //if (PluginDomain != null)
- //Unload();
- }
- return Plugin;
- }
- }
- }
- /**
- * Output
- *
- * Loaded assemblies in appdomain: plugins
- * - mscorlib
- * - Mono.Security
- * - TestLib
- * - PluginContracts
- * Loaded assemblies in appdomain: HostApplication.exe
- * - mscorlib
- * - HostApplication
- * - PluginContracts
- * - PluginAdapter
- * - LogTools
- * - Mono.Security
- * - TestLib
- * Plugin=MyPlugin
- * Unloading domain: plugins
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement