protected override void InitializeComponents(TypeVisualizerDialog visualizerDialog, IServiceProvider provider)
        {
            visualizerDialog.Text = Text;
            visualizerContext     = new ServiceContainer(provider);
            visualizerContext.AddService(typeof(ITypeVisualizerContext), this);
            visualizerContext.AddService(typeof(TypeVisualizerDialog), visualizerDialog);
            visualizerContext.AddService(typeof(IDialogTypeVisualizerService), visualizerDialog);
            visualizerContext.AddService(typeof(ExpressionBuilderGraph), workflowGraphView.Workflow);
            visualizer.Value.Load(visualizerContext);
            var visualizerOutput = visualizer.Value.Visualize(visualizerSource.Output, visualizerContext);

            visualizerDialog.AllowDrop  = true;
            visualizerDialog.KeyPreview = true;
            visualizerDialog.KeyDown   += new KeyEventHandler(visualizerDialog_KeyDown);
            visualizerDialog.DragEnter += new DragEventHandler(visualizerDialog_DragEnter);
            visualizerDialog.DragOver  += new DragEventHandler(visualizerDialog_DragOver);
            visualizerDialog.DragDrop  += new DragEventHandler(visualizerDialog_DragDrop);
            visualizerDialog.Load      += delegate
            {
                visualizerObserver = visualizerOutput.Subscribe(
                    xs => { },
                    ex => visualizerDialog.BeginInvoke((Action)(() =>
                {
                    MessageBox.Show(visualizerDialog, ex.Message, visualizerDialog.Text);
                    visualizerDialog.Close();
                })));
            };

            visualizerDialog.HandleDestroyed += delegate
            {
                if (visualizerObserver != null)
                {
                    visualizerObserver.Dispose();
                    visualizerObserver = null;
                }
            };

            visualizerDialog.FormClosed += delegate
            {
                visualizer.Value.Unload();
                visualizerContext.RemoveService(typeof(ExpressionBuilderGraph));
                visualizerContext.RemoveService(typeof(IDialogTypeVisualizerService));
                visualizerContext.RemoveService(typeof(TypeVisualizerDialog));
                visualizerContext.RemoveService(typeof(ITypeVisualizerContext));
                visualizerContext.Dispose();
                visualizerContext = null;
            };

            visualizerDialog.Shown += delegate
            {
                visualizerDialog.Activated += delegate
                {
                    workflowGraphView.SelectBuilderNode(source);
                };
            };
        }
 static IDisposable SubscribeDialog <TSource>(IObservable <TSource> source, TypeVisualizerDialog visualizerDialog)
 {
     return(source.Subscribe(
                xs => { },
                ex => visualizerDialog.BeginInvoke((Action)(() =>
     {
         MessageBox.Show(visualizerDialog, ex.Message, visualizerDialog.Text);
         visualizerDialog.Close();
     }))));
 }