示例#1
0
        protected override async Task InitializeAsync(CancellationToken cancellationToken, IProgress <ServiceProgressData> progress)
        {
            await base.InitializeAsync(cancellationToken, progress);


            //ToDo move this down - just before command initializations
            // When initialized asynchronously, the current thread may be a background thread at this point.
            // Do any initialization that requires the UI thread after switching to the UI thread.
            await JoinableTaskFactory.SwitchToMainThreadAsync(cancellationToken);

            var dte = (DTE) await GetServiceAsync(typeof(DTE));

            Assumes.Present(dte);

            var dte2 = (DTE2) await GetServiceAsync(typeof(SDTE));

            Assumes.Present(dte2);

            solService = await GetServiceAsync(typeof(SVsSolution)) as IVsSolution;

            Assumes.Present(solService);

            var rdt = await GetServiceAsync(typeof(SVsRunningDocumentTable)) as IVsRunningDocumentTable;

            Assumes.Present(rdt);

            //! Set globals
            DteRefs.Package  = this;
            DteRefs.DTE      = dte;
            DteRefs.DTE2     = dte2;
            DteRefs.Solution = solService;
            DteRefs.RDT      = rdt;


            //! Activate MEF
            ActivateMEF();

            //! Get VS editor's background color
            var vsProperties   = dte.Properties["FontsAndColors", "TextEditor"];
            var fontsAndColors = vsProperties.Item("FontsAndColorsItems").Object as FontsAndColorsItems;
            var plainText      = fontsAndColors.Item("Plain Text");

            //! Set VS editor's background in configs
            var bg = ColorExtensions.FromInt((int)plainText.Background);

            commentConfigs.Defaults.VSBackground = Color.FromArgb(255, bg.R, bg.G, bg.B);

            //! Register classifications
            //? This might be redundant!
            clsService.SyncWithConfigs();


            //! Hook events
            solService.AdviseSolutionEvents(ViewModelLocator.Instance, out var cookie);

            var events = dte2.Events as Events2;

            if (events != null)
            {
                ViewModelLocator.Instance.SubscribeToEvents(events);
            }

            //! Handle solution load
            if (await IsSolutionLoadedAsync())
            {
                //todo Remove this if not used

                //! Only handle it if it's solution, and ignore it if it's a folder.
                //solService.GetProperty((int)__VSPROPID.VSPROPID_IsSolutionOpen, out var value);
                //if (await IsSolutionLoadedAsync())
                //HandleOpenSolution();

                // ViewModelLocator.Instance.Scanner.ScanSolution();
            }

            await BookmarksListCommand.InitializeAsync(this);

            await SettingsCommand.InitializeAsync(this);
        }