Наследование: IOutputWindowContainer
 //Send executed command to output window. So, user will know what he executed
 private void SendToOutputWindow(string title, string message)//26Mar2013
 {
     #region Get Active output Window
     //////// Active output window ///////
     OutputWindowContainer owc = (LifetimeService.Instance.Container.Resolve <IOutputWindowContainer>()) as OutputWindowContainer;
     OutputWindow          ow  = owc.ActiveOutputWindow as OutputWindow; //get currently active window
     #endregion
     ow.AddMessage(title, message);
 }
        private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)///15Jan2013
        {
            try
            {
                MainWindow mwindow = LifetimeService.Instance.Container.Resolve <MainWindow>();//28Jan2013
                mwindow.Activate();
                if (mwindow.OwnedWindows.Count > 1)
                {
                    System.Windows.Forms.DialogResult dresult = ExitAppMessageBox(); //19feb2013
                    if (dresult == System.Windows.Forms.DialogResult.Yes)            //save & exit
                    {
                        #region CLose Output Windows and then Close Syntax Eiditor
                        //// Close output window and synedtr window /// 05Feb2013
                        OutputWindowContainer owc      = (LifetimeService.Instance.Container.Resolve <IOutputWindowContainer>()) as OutputWindowContainer;
                        SyntaxEditorWindow    sewindow = LifetimeService.Instance.Container.Resolve <SyntaxEditorWindow>();

                        // First collect window names
                        string[] outwinnames = new string[owc.Count];
                        int      i           = 0;
                        foreach (KeyValuePair <String, IOutputWindow> item in owc.AllOutputWindows)
                        {
                            outwinnames[i] = item.Key;
                            i++;
                        }
                        //close each output window one by one.
                        foreach (string winname in outwinnames)
                        {
                            (owc.GetOuputWindow(winname) as Window).Close();//invoke close {Closing then Closed }
                        }

                        //now close Syntax Editor window
                        sewindow.SynEdtForceClose = true;
                        sewindow.Close();
                        if (owc.Count > 0 || sewindow != null && !sewindow.SynEdtForceClose) // if any of the output window is open
                        {
                            e.Cancel = true;                                                 // abort closing.
                        }
                        #endregion
                    }
                    else if (dresult == System.Windows.Forms.DialogResult.No) //Exit without save
                    {
                    }
                    else //cancel exit. Keep the app open.
                    {
                        e.Cancel = true;
                        return;
                    }
                }
            }
            catch (Exception ex)
            {
                logService.WriteToLogLevel("Error while closing:" + ex.Message, LogLevelEnum.Error);
            }
        }