Lifecycle Scopes
Step 1: Write Your Code
Section titled “Step 1: Write Your Code”// Singleton (default - no annotation needed)export class SingletonService { constructor(private logger: ILogger) {} getServiceId(): string { return 'singleton'; }}
// Transient (requires @scope annotation)/** * @scope transient */export class TransientService { constructor(private logger: ILogger) {} getServiceId(): string { return 'transient'; }}Step 2: Generate Container
Section titled “Step 2: Generate Container”npx @notjustcoders/ioc-arise generateStep 3: Generated Code
Section titled “Step 3: Generated Code”container.gen.ts:
import { Container, Lifecycle } from '@notjustcoders/di-container';import type { ContainerRegistry } from './container.gen.d';
export const container = new Container<ContainerRegistry>();
container.register('SingletonService', { useClass: SingletonService, dependencies: ['ILogger'], lifecycle: Lifecycle.Singleton // Default});
container.register('TransientService', { useClass: TransientService, dependencies: ['ILogger'], lifecycle: Lifecycle.Transient // From @scope transient});Step 4: Use It
Section titled “Step 4: Use It”import { container } from './container.gen';
// Singleton - same instanceconst s1 = container.resolve('SingletonService');const s2 = container.resolve('SingletonService');console.log(s1 === s2); // true
// Transient - new instance each timeconst t1 = container.resolve('TransientService');const t2 = container.resolve('TransientService');console.log(t1 === t2); // false