Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 1 addition & 4 deletions .eslintignore
Original file line number Diff line number Diff line change
Expand Up @@ -927,10 +927,7 @@ src/client/logging/util.ts
src/client/logging/index.ts
src/client/logging/formatters.ts
src/client/logging/trace.ts
src/client/ioc/serviceManager.ts
src/client/ioc/container.ts
src/client/ioc/types.ts
src/client/ioc/index.ts

src/client/refactor/proxy.ts
src/client/workspaceSymbols/main.ts
src/client/workspaceSymbols/contracts.ts
Expand Down
5 changes: 5 additions & 0 deletions src/client/ioc/container.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,11 @@ try {
@injectable()
export class ServiceContainer implements IServiceContainer {
constructor(private container: Container) {}

public get<T>(serviceIdentifier: interfaces.ServiceIdentifier<T>, name?: string | number | symbol): T {
return name ? this.container.getNamed<T>(serviceIdentifier, name) : this.container.get<T>(serviceIdentifier);
}

public getAll<T>(
serviceIdentifier: string | symbol | Newable<T> | Abstract<T>,
name?: string | number | symbol | undefined,
Expand All @@ -30,6 +32,7 @@ export class ServiceContainer implements IServiceContainer {
? this.container.getAllNamed<T>(serviceIdentifier, name)
: this.container.getAll<T>(serviceIdentifier);
}

public tryGet<T>(
serviceIdentifier: interfaces.ServiceIdentifier<T>,
name?: string | number | symbol | undefined,
Expand All @@ -41,5 +44,7 @@ export class ServiceContainer implements IServiceContainer {
} catch {
// This might happen after the container has been destroyed
}

return undefined;
}
}
4 changes: 2 additions & 2 deletions src/client/ioc/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
import { IServiceContainer } from './types';

let container: IServiceContainer;
export function getServiceContainer() {
export function getServiceContainer(): IServiceContainer {
return container;
}
export function setServiceContainer(serviceContainer: IServiceContainer) {
export function setServiceContainer(serviceContainer: IServiceContainer): void {
container = serviceContainer;
}
11 changes: 10 additions & 1 deletion src/client/ioc/serviceManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,11 @@ type identifier<T> = string | symbol | Newable<T> | Abstract<T>;
@injectable()
export class ServiceManager implements IServiceManager {
constructor(private container: Container) {}

public add<T>(
serviceIdentifier: identifier<T>,

// eslint-disable-next-line @typescript-eslint/no-explicit-any
constructor: new (...args: any[]) => T,
name?: string | number | symbol | undefined,
bindings?: symbol[],
Expand All @@ -28,6 +30,7 @@ export class ServiceManager implements IServiceManager {
});
}
}

public addFactory<T>(
factoryIdentifier: interfaces.ServiceIdentifier<interfaces.Factory<T>>,
factoryMethod: interfaces.FactoryCreator<T>,
Expand All @@ -42,6 +45,7 @@ export class ServiceManager implements IServiceManager {
public addSingleton<T>(
serviceIdentifier: identifier<T>,

// eslint-disable-next-line @typescript-eslint/no-explicit-any
constructor: new (...args: any[]) => T,
name?: string | number | symbol | undefined,
bindings?: symbol[],
Expand Down Expand Up @@ -70,9 +74,11 @@ export class ServiceManager implements IServiceManager {
this.container.bind<T>(serviceIdentifier).toConstantValue(instance);
}
}

public get<T>(serviceIdentifier: identifier<T>, name?: string | number | symbol | undefined): T {
return name ? this.container.getNamed<T>(serviceIdentifier, name) : this.container.get<T>(serviceIdentifier);
}

public tryGet<T>(serviceIdentifier: identifier<T>, name?: string | number | symbol | undefined): T | undefined {
try {
return name
Expand All @@ -81,7 +87,10 @@ export class ServiceManager implements IServiceManager {
} catch {
// This might happen after the container has been destroyed
}

return undefined;
}

public getAll<T>(serviceIdentifier: identifier<T>, name?: string | number | symbol | undefined): T[] {
return name
? this.container.getAllNamed<T>(serviceIdentifier, name)
Expand Down Expand Up @@ -124,7 +133,7 @@ export class ServiceManager implements IServiceManager {
}
}

public dispose() {
public dispose(): void {
this.container.unbindAll();
this.container.unload();
}
Expand Down
7 changes: 2 additions & 5 deletions src/client/ioc/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,19 @@
import { interfaces } from 'inversify';
import { IDisposable } from '../common/types';

//tslint:disable:callable-types

export interface Newable<T> {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
new (...args: any[]): T;
}
//tslint:enable:callable-types

export interface Abstract<T> {
prototype: T;
}

//tslint:disable:callable-types
export type ClassType<T> = {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
new (...args: any[]): T;
};
//tslint:enable:callable-types

export const IServiceManager = Symbol('IServiceManager');

Expand Down