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