public TyeExplorerToolWindow() : base(null)
        {
            Caption = "Tye Explorer";

            // This is the user control hosted by the tool window; Note that, even if this class implements IDisposable,
            // we are not calling Dispose on this object. This is because ToolWindowPane calls Dispose on
            // the object returned by the Content property.
            Content = _control = new TyeExplorerToolWindowControl();
            ToolBar = new CommandID(PackageGuids.guidTyeExplorerCommandsAndMenus, PackageIds.TyeExplorer_Toolbar);

            _control.AttachToReplica     += OnAttachToReplica;
            _control.AttachToService     += OnAttachToService;
            _control.SelectedItemChanged += OnSelectedItemChanged;
            _control.ShowServiceLogs     += OnShowServiceLogs;

            var servicesProvider = TyeExplorerServices.Get <TyeServicesProvider>();

            servicesProvider.ServicesRequestStarted += OnServicesRequestStarted;
            servicesProvider.ServicesReceived       += OnServicesReceived;
            servicesProvider.ServiceRequestFailure  += ServicesProviderOnServiceRequestFailure;

            var services = servicesProvider.Services;

            if (services != null)
            {
                _control.SetServices(services.ToArray());
            }
        }
        private void OnAttachToReplica(object sender, ReplicaEventArgs e)
        {
            if (e.Replica.Pid == null)
            {
                return;
            }

            ThreadHelper.ThrowIfNotOnUIThread();

            TyeExplorerServices.Get <DebuggerAttacher>().Attach(e.Replica);
        }
 private void OnShowServiceLogs(object sender, ServiceEventArgs e)
 {
     ThreadHelper.ThrowIfNotOnUIThread();
     TyeExplorerServices.Get <TyeServiceOutputManager>().Attach(e.Service);
 }
 private void OnAttachToService(object sender, ServiceEventArgs e)
 {
     ThreadHelper.ThrowIfNotOnUIThread();
     TyeExplorerServices.Get <DebuggerAttacher>().Attach(e.Service.Replicas.Values);
 }
 private void OnSelectedItemChanged(object sender, ItemEventArgs e)
 {
     TyeExplorerServices.Get <TyeServicesProvider>().SelectedService = e.Item;
 }