diff --git a/extensions/arc/src/extension.ts b/extensions/arc/src/extension.ts index fccd30eb2f..dffb4ba905 100644 --- a/extensions/arc/src/extension.ts +++ b/extensions/arc/src/extension.ts @@ -67,7 +67,7 @@ export async function activate(context: vscode.ExtensionContext): Promisevscode.extensions.getExtension(rd.extension.name)?.exports; - rdApi.registerOptionsSourceProvider(new ArcControllersOptionsSourceProvider(treeDataProvider)); + context.subscriptions.push(rdApi.registerOptionsSourceProvider(new ArcControllersOptionsSourceProvider(treeDataProvider))); return arcApi(treeDataProvider); } diff --git a/extensions/azdata/src/extension.ts b/extensions/azdata/src/extension.ts index 8697e3e334..57bea887ad 100644 --- a/extensions/azdata/src/extension.ts +++ b/extensions/azdata/src/extension.ts @@ -65,7 +65,7 @@ export async function activate(context: vscode.ExtensionContext): Promisevscode.extensions.getExtension(rd.extension.name)?.exports; - rdApi.registerOptionsSourceProvider(new ArcControllerConfigProfilesOptionsSource(azdataApi)); + context.subscriptions.push(rdApi.registerOptionsSourceProvider(new ArcControllerConfigProfilesOptionsSource(azdataApi))); return azdataApi; } diff --git a/extensions/azurecore/src/extension.ts b/extensions/azurecore/src/extension.ts index ebaedf0cd2..55c53cf80b 100644 --- a/extensions/azurecore/src/extension.ts +++ b/extensions/azurecore/src/extension.ts @@ -109,7 +109,7 @@ export async function activate(context: vscode.ExtensionContext): Promise { - api.registerValueProvider({ + context.subscriptions.push(api.registerValueProvider({ id: 'subscription-id-to-tenant-id', getValue: async (triggerValue: string) => { if (triggerValue === '') { @@ -137,7 +137,7 @@ export async function activate(context: vscode.ExtensionContext): Promise(); - registerOptionsSourceProvider(provider: rd.IOptionsSourceProvider): void { + registerOptionsSourceProvider(provider: rd.IOptionsSourceProvider): vscode.Disposable { if (this._optionsSourceStore.has(provider.id)) { throw new Error(loc.optionsSourceAlreadyDefined(provider.id)); } this._optionsSourceStore.set(provider.id, provider); + return { + dispose: () => this.unregisterOptionsSourceProvider(provider.id) + }; + } + + private unregisterOptionsSourceProvider(providerId: string): void { + this._optionsSourceStore.delete(providerId); } getOptionsSource(optionsSourceProviderId: string): rd.IOptionsSourceProvider { diff --git a/extensions/resource-deployment/src/services/valueProviderService.ts b/extensions/resource-deployment/src/services/valueProviderService.ts index 152b9a89d6..d447200f12 100644 --- a/extensions/resource-deployment/src/services/valueProviderService.ts +++ b/extensions/resource-deployment/src/services/valueProviderService.ts @@ -3,16 +3,24 @@ * Licensed under the Source EULA. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +import * as vscode from 'vscode'; import * as rd from 'resource-deployment'; import * as loc from '../localizedConstants'; class ValueProviderService { private _valueProviderStore = new Map(); - registerValueProvider(provider: rd.IValueProvider): void { + registerValueProvider(provider: rd.IValueProvider): vscode.Disposable { if (this._valueProviderStore.has(provider.id)) { throw new Error(loc.valueProviderAlreadyDefined(provider.id)); } this._valueProviderStore.set(provider.id, provider); + return { + dispose: () => this.unregisterValueProvider(provider.id) + }; + } + + private unregisterValueProvider(providerId: string): void { + this._valueProviderStore.delete(providerId); } getValueProvider(providerId: string): rd.IValueProvider { diff --git a/extensions/resource-deployment/src/typings/resource-deployment.d.ts b/extensions/resource-deployment/src/typings/resource-deployment.d.ts index def6463787..01e4c5a156 100644 --- a/extensions/resource-deployment/src/typings/resource-deployment.d.ts +++ b/extensions/resource-deployment/src/typings/resource-deployment.d.ts @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ declare module 'resource-deployment' { import * as azdata from 'azdata'; + import * as vscode from 'vscode'; export const enum ErrorType { userCancelled, @@ -36,7 +37,7 @@ declare module 'resource-deployment' { */ export interface IExtension { - registerOptionsSourceProvider(provider: IOptionsSourceProvider): void, - registerValueProvider(provider: IValueProvider): void + registerOptionsSourceProvider(provider: IOptionsSourceProvider): vscode.Disposable, + registerValueProvider(provider: IValueProvider): vscode.Disposable } }