示例#1
0
        internal void Shutdown()
        {
            try
            {
                if (IsInitialized)
                {
                    foreach (var extensionHandle in extensionHandles)
                    {
                        try
                        {
                            extensionHandle.GetComponent().Shutdown();
                        }
                        catch (Exception ex)
                        {
                            logger.Log(LogSeverity.Error,
                                       string.Format("Failed to shutdown shell extension '{0}'.", extensionHandle.Id),
                                       ex);
                        }
                    }
                }
            }
            finally
            {
                if (logger != null)
                {
                    runtime.RemoveLogListener(logger);
                }

                logger            = null;
                shellPackage      = null;
                shellAddInHandler = null;
            }
        }
示例#2
0
        internal void Initialize(ShellPackage shellPackage, ShellAddInHandler shellAddInHandler)
        {
            if (IsInitialized)
            {
                Shutdown();
            }

            this.shellPackage      = shellPackage;
            this.shellAddInHandler = shellAddInHandler;
            logger = new ShellLogger(shellPackage);

            runtime.AddLogListener(logger);

            foreach (var extensionHandle in extensionHandles)
            {
                try
                {
                    extensionHandle.GetComponent().Initialize();
                }
                catch (Exception ex)
                {
                    logger.Log(LogSeverity.Error,
                               string.Format("Failed to initialize shell extension '{0}'.", extensionHandle.Id),
                               ex);
                }
            }
        }
示例#3
0
            public static ShellHolder Initialize(ShellPackage shellPackage, ShellAddInHandler shellAddInHandler)
            {
                DefaultShell shell = ShellAccessor.Instance;

                shell.Initialize(shellPackage, shellAddInHandler);
                return(new ShellHolder(shell));
            }
示例#4
0
        /// <summary>
        /// Called when the Shell Add-In has been disconnected.
        /// </summary>
        public void AddInDisconnected()
        {
            ShellLock.WithWriterLock(() =>
            {
                addInHandler = null;

                UpdateShellActivationWithWriterLockHeld();
            });
        }
示例#5
0
        /// <summary>
        /// Called when the Shell Add-In has been connected.
        /// </summary>
        /// <param name="addInHandler">The add-in handler.</param>
        /// <exception cref="ArgumentNullException">Thrown if <paramref name="addInHandler"/> is null.</exception>
        /// <exception cref="InvalidOperationException">Thrown if a different <paramref name="addInHandler"/> has already reported being connected.</exception>
        public void AddInConnected(ShellAddInHandler addInHandler)
        {
            if (addInHandler == null)
                throw new ArgumentNullException("addInHandler");

            ShellLock.WithWriterLock(() =>
            {
                if (this.addInHandler != null)
                {
                    if (this.addInHandler == addInHandler)
                        return;

                    throw new InvalidOperationException("Multiple add-in handlers appear to be attempting to activate the shell.");
                }

                this.addInHandler = addInHandler;

                UpdateShellActivationWithWriterLockHeld();
            });
        }
示例#6
0
        /// <summary>
        /// Called when the Shell Add-In has been connected.
        /// </summary>
        /// <param name="addInHandler">The add-in handler.</param>
        /// <exception cref="ArgumentNullException">Thrown if <paramref name="addInHandler"/> is null.</exception>
        /// <exception cref="InvalidOperationException">Thrown if a different <paramref name="addInHandler"/> has already reported being connected.</exception>
        public void AddInConnected(ShellAddInHandler addInHandler)
        {
            if (addInHandler == null)
            {
                throw new ArgumentNullException("addInHandler");
            }

            ShellLock.WithWriterLock(() =>
            {
                if (this.addInHandler != null)
                {
                    if (this.addInHandler == addInHandler)
                    {
                        return;
                    }

                    throw new InvalidOperationException("Multiple add-in handlers appear to be attempting to activate the shell.");
                }

                this.addInHandler = addInHandler;

                UpdateShellActivationWithWriterLockHeld();
            });
        }
示例#7
0
        /// <summary>
        /// Called when the Shell Add-In has been disconnected.
        /// </summary>
        public void AddInDisconnected()
        {
            ShellLock.WithWriterLock(() =>
            {
                addInHandler = null;

                UpdateShellActivationWithWriterLockHeld();
            });
        }
示例#8
0
 public static ShellHolder Initialize(ShellPackage shellPackage, ShellAddInHandler shellAddInHandler)
 {
     DefaultShell shell = ShellAccessor.Instance;
     shell.Initialize(shellPackage, shellAddInHandler);
     return new ShellHolder(shell);
 }