export type ServiceLifetime = 'singleton' | 'scoped' | 'transient'; export interface ServiceConstructor { new (...args: unknown[]): T; dependencies?: string[]; } export interface ServiceOptions { retain?: boolean; } export type ServiceFactory = (resolver: ServiceResolver) => T; export interface ServiceDescriptor { name: string; shortName: string; type?: ServiceConstructor; factory?: ServiceFactory; lifetime: ServiceLifetime; retain: boolean; dependencies?: string[]; instance: T | null; } export interface ParameterizedServiceDescriptor { name: string; shortName: string; factory: (resolver: ServiceResolver, ...args: TArgs) => T; lifetime: ServiceLifetime; retain: boolean; dependencies?: string[]; instances: Map; } export interface ServiceResolver { resolve(name: string): T; } export interface ScopeHandle { resolve(name: string): T; resolveWithArgs(name: string, ...args: unknown[]): T; dispose(): void; }