export type Constructor = new (...args: any[]) => T; export declare function Inject(keyOrType?: string | Constructor): PropertyDecorator & ParameterDecorator; export interface RegistrationOptions { scope?: ServiceScope; key?: string; instance?: unknown; } export declare function setDebugFunc(func: (...msg: any[]) => {}): void; export declare class ServiceCollection { private servicesByKey; private servicesByClassName; register(constructor: Constructor, options: RegistrationOptions): void; registerByType(constructor: Constructor, scope?: ServiceScope): void; tryGet(key: string | Constructor): Registration | undefined; get(key: string | Constructor): Registration; } export type ServiceScope = 'global' | 'closest'; export declare function ContainerService(key?: string, scope?: ServiceScope): (target: Constructor) => void; export declare class ServiceContainer { private instances; private serviceCollection; constructor(serviceCollection: ServiceCollection); resolve(keyOrType: string | Constructor): T; enrich(instance: T): void; } export declare let serviceCollection: ServiceCollection; export declare let container: ServiceContainer; declare class Registration { classConstructor: Constructor; scope: ServiceScope; key?: string; instance?: unknown; constructor(classConstructor: Constructor, scope: ServiceScope, key?: string, instance?: unknown); } export {};