- Timestamp:
- 10/08/08 22:54:02 (15 years ago)
- Location:
- branches/HL-3.2-MonoMigration
- Files:
-
- 1 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
branches/HL-3.2-MonoMigration/HeuristicLab.PluginInfrastructure/PluginManager.cs
r316 r638 27 27 // must extend MarshalByRefObject because of event passing between Loader and PluginManager (each in it's own AppDomain) 28 28 public class PluginManager : MarshalByRefObject { 29 30 29 // singleton: only one manager allowed in each AppDomain 31 private static PluginManager manager = new PluginManager(); 30 private static readonly PluginManager manager = PluginManager.manager==null?new PluginManager():PluginManager.manager; 31 static PluginManager() { Console.WriteLine("static ctor called "); } 32 32 public static PluginManager Manager { 33 get { return manager; } 33 get { 34 return manager; 35 } 34 36 } 35 37 36 // singleton: only one control manager allowed in each applicat oin (i.e. AppDomain)38 // singleton: only one control manager allowed in each application (i.e. AppDomain) 37 39 private static IControlManager controlManager; 38 40 public static IControlManager ControlManager { … … 71 73 private ICollection<PluginInfo> loadedPlugins; 72 74 public ICollection<PluginInfo> LoadedPlugins { 73 get { return loadedPlugins; } 74 internal set { loadedPlugins = value; } 75 get { 76 Console.WriteLine(AppDomain.CurrentDomain.Id); 77 Console.WriteLine(this.GetHashCode()); 78 if(loadedPlugins != null) Console.WriteLine(loadedPlugins.Count); else Console.WriteLine("Loaded plugins==null!"); 79 return loadedPlugins; 80 } 81 internal set { 82 Console.WriteLine(AppDomain.CurrentDomain.Id); 83 Console.WriteLine(value.Count); 84 Console.WriteLine(this.GetHashCode()); 85 loadedPlugins = new List<PluginInfo>(value); 86 } 75 87 } 76 88 … … 82 94 AppDomainSetup setup = AppDomain.CurrentDomain.SetupInformation; 83 95 setup.PrivateBinPath = pluginDir; 84 pluginDomain = AppDomain.CreateDomain("plugin domain", null, setup); 96 pluginDomain = AppDomain.CreateDomain("plugin domain"); 97 pluginDomain.SetupInformation.PrivateBinPath = pluginDir; 85 98 remoteLoader = (Loader)pluginDomain.CreateInstanceAndUnwrap("HeuristicLab.PluginInfraStructure", "HeuristicLab.PluginInfrastructure.Loader"); 86 remoteLoader.PluginAction += delegate(object sender, PluginManagerActionEventArgs args) { if(Action != null) Action(this, args); };99 remoteLoader.PluginAction += new PluginManagerActionEventHandler(remoteLoader_PluginAction); 87 100 remoteLoader.Init(); 88 101 NotifyListeners(PluginManagerAction.Initialized, "-"); 102 } 103 104 public void remoteLoader_PluginAction(object sender, PluginManagerActionEventArgs e) { 105 if(Action != null) Action(this, e); 89 106 } 90 107 … … 98 115 // activate a PluginRunner instance in the application 99 116 // and remotely tell it to start the application 100 117 Console.WriteLine(appInfo); 101 118 NotifyListeners(PluginManagerAction.Starting, appInfo.Name); 102 119 AppDomainSetup setup = AppDomain.CurrentDomain.SetupInformation; 103 120 setup.PrivateBinPath = pluginDir; 104 AppDomain applicationDomain = AppDomain.CreateDomain(appInfo.Name + " AppDomain", null, setup); 121 AppDomain applicationDomain = AppDomain.CreateDomain(appInfo.Name + " AppDomain"); 122 applicationDomain.SetupInformation.PrivateBinPath = pluginDir; 105 123 try { 106 124 Runner remoteRunner = (Runner)applicationDomain.CreateInstanceAndUnwrap("HeuristicLab.PluginInfrastructure", "HeuristicLab.PluginInfrastructure.Runner"); … … 108 126 remoteRunner.LoadPlugins(remoteLoader.ActivePlugins); 109 127 NotifyListeners(PluginManagerAction.Initialized, "All plugins"); 110 remoteRunner.Run(appInfo );128 remoteRunner.Run(appInfo.PluginAssembly, appInfo.PluginType); 111 129 } finally { 112 130 // make sure domain is unloaded in all cases
Note: See TracChangeset
for help on using the changeset viewer.