/// <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);
            }
        }