示例#1
0
        /// <summary>
        /// Default constructor of the package.
        /// Inside this method you can place any initialization code that does not require
        /// any Visual Studio service because at this point the package object is created but
        /// not sited yet inside Visual Studio environment. The place to do all the other
        /// initialization is the Initialize method.
        /// </summary>
        public VSPackage1Package()
        {
            XmlConfigurator.Configure(new FileInfo("logging.config"));
            var logger = LogManager.GetLogger(this.GetType());

            logger.Debug("Startup");

            AsyncServiceCreatorCallback cc = CreateServiceAsync;

            this.AddService(typeof(IClassOutlineSettingsProvider), cc, true);
            registerExceptionHandler();
        }
        /// <summary>
        ///     Initialization of the package; this method is called right after the package is sited, so this is the
        ///     place where you can put all the initialization code that rely on services provided by VisualStudio.
        /// </summary>
        /// <param name="cancellationToken">
        ///     A cancellation token to monitor for initialization cancellation, which can occur when VS is shutting down.
        /// </param>
        /// <param name="progress"> A provider for progress updates. </param>
        /// <returns>
        ///     A task representing the async work of package initialization, or an already completed task if there is
        ///     none. Do not return null from this method.
        /// </returns>
        protected override async Task InitializeAsync(CancellationToken cancellationToken, IProgress <ServiceProgressData> progress)
        {
            var protoCallback = new AsyncServiceCreatorCallback(async(IAsyncServiceContainer container, CancellationToken ct, Type serviceType) =>
            {
                if (typeof(IProtoAttributeService) == serviceType)
                {
                    return(new ProtoAttributeService(this, new ProtoAttributeAdder(), new ProtoAttributeRemover(), new ProtoAttributeRewriter()));
                }
                return(null);
            });

            AddService(typeof(IProtoAttributeService), protoCallback, true);

            var datAnnoCallback = new AsyncServiceCreatorCallback(async(IAsyncServiceContainer container, CancellationToken ct, Type serviceType) =>
            {
                if (typeof(IDataAnnoAttributeService) == serviceType)
                {
                    return(new DataAnnoAttributeService(this, new DataAttributeAdder(), new DataAttributeRemover(), new DataAttributeRewriter()));
                }
                return(null);
            });

            AddService(typeof(IDataAnnoAttributeService), datAnnoCallback, true);

            // 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);

            await Task.WhenAll(
                ProtoAddAttrCommand.InitializeAsync(this),
                ProtoRenumberAttrCommand.InitializeAsync(this),
                ProtoRemoveAttrCommand.InitializeAsync(this),
                DataAnnoAddAttrCommand.InitializeAsync(this),
                DataAnnoRenumberAttrCommand.InitializeAsync(this),
                DataAnnoRemoveAttrCommand.InitializeAsync(this),

                Commands.Menu.ProtoAddAttrCommand.InitializeAsync(this),
                Commands.Menu.ProtoRenumberAttrCommand.InitializeAsync(this),
                Commands.Menu.ProtoRemoveAttrCommand.InitializeAsync(this),
                Commands.Menu.DataAnnoAddAttrCommand.InitializeAsync(this),
                Commands.Menu.DataAnnoRenumberAttrCommand.InitializeAsync(this),
                Commands.Menu.DataAnnoRemoveAttrCommand.InitializeAsync(this)
                );
        }