/// <summary>Instantiates a new plugin</summary> /// <param name="pluginEntryAssemblyFilePath"></param> /// <param name="sessionGuid"></param> /// <param name="mgrChannelName"></param> /// <param name="mgrProcess"></param> /// <param name="isDev"></param> /// <param name="cts"></param> protected PluginHostBase( string pluginEntryAssemblyFilePath, Guid sessionGuid, string mgrChannelName, Process mgrProcess, bool isDev, CancellationTokenSource cts) { this._cts = cts; // Connect to Plugin Manager var pluginMgr = RemotingServicesEx.ConnectToIpcServer <IPluginManager <ICore> >(mgrChannelName); if (pluginMgr == null) { Exit(PluginHostConst.ExitIpcConnectionError); return; } // Setup assembly resolution if (isDev) { AppDomain.CurrentDomain.AssemblyResolve += DevelopmentPluginAssemblyResolver; } // Load & create plugin _plugin = LoadAssembliesAndCreatePluginInstance(pluginEntryAssemblyFilePath); if (_plugin == null) { Exit(PluginHostConst.ExitNoPluginTypeFound); return; } // Connect plugin to Plugin Manager var core = pluginMgr.ConnectPlugin( _plugin.ChannelName, sessionGuid); if (core == null) { Exit(PluginHostConst.ExitCouldNotConnectPlugin); return; } // Inject properties InjectPropertyDependencies(_plugin, core, pluginMgr, sessionGuid, isDev); _plugin.OnInjected(); // Start monitoring Plugin Manager process if (StartMonitoringPluginMgrProcess(mgrProcess) == false) { Exit(PluginHostConst.ExitParentExited); } }