Advertisement
Guest User

Untitled

a guest
Oct 6th, 2015
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.67 KB | None | 0 0
  1. namespace HostApplications
  2. {
  3. public class MainClass
  4. {
  5. private static void TestWithAdapter()
  6. {
  7. var plugin = GenericAdapter.LoadPlugin("TestLib", "TestLib.MyPlugin");
  8. Console.WriteLine("Plugin={0}", plugin.Name);
  9. GenericAdapter.Unload();
  10. }
  11.  
  12. public static void Main()
  13. {
  14. TestWithAdapter();
  15. }
  16. }
  17. }
  18.  
  19. namespace PluginContracts
  20. {
  21. public interface IPlugin
  22. {
  23. string Name { get; }
  24. }
  25. }
  26.  
  27. namespace TestLib
  28. {
  29. public class MyPlugin : MarshalByRefObject, IPlugin
  30. {
  31. public string Name
  32. {
  33. get { return "MyPlugin"; }
  34. }
  35. }
  36. }
  37.  
  38. namespace PluginAdapter
  39. {
  40. public class GenericAdapter
  41. {
  42. private static AppDomain PluginDomain = null;
  43. public static IPlugin Plugin;
  44.  
  45. public static void Unload()
  46. {
  47. Console.WriteLine("Unloading domain: {0}", PluginDomain.FriendlyName);
  48. AppDomain.Unload(PluginDomain);
  49. }
  50.  
  51. public static IPlugin LoadPlugin(string assemblyName, string typeName)
  52. {
  53. if (PluginDomain == null)
  54. PluginDomain = AppDomain.CreateDomain("plugins");
  55.  
  56. try
  57. {
  58. Plugin = (IPlugin)PluginDomain.CreateInstanceAndUnwrap(assemblyName, typeName);
  59.  
  60. Log.LogLoadedAssemblies(PluginDomain);
  61. Console.WriteLine();
  62. Log.LogLoadedAssemblies();
  63. }
  64. catch (Exception ex)
  65. {
  66. Log.LogException(ex);
  67. }
  68. finally
  69. {
  70. //if (PluginDomain != null)
  71. //Unload();
  72. }
  73. return Plugin;
  74. }
  75. }
  76. }
  77.  
  78. /**
  79. * Output
  80. *
  81. * Loaded assemblies in appdomain: plugins
  82. * - mscorlib
  83. * - Mono.Security
  84. * - TestLib
  85. * - PluginContracts
  86.  
  87. * Loaded assemblies in appdomain: HostApplication.exe
  88. * - mscorlib
  89. * - HostApplication
  90. * - PluginContracts
  91. * - PluginAdapter
  92. * - LogTools
  93. * - Mono.Security
  94. * - TestLib
  95. * Plugin=MyPlugin
  96. * Unloading domain: plugins
  97. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement