Skip to content

Lifecycle Scopes

// 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'; }
}
Terminal window
npx @notjustcoders/ioc-arise generate

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
});
import { container } from './container.gen';
// Singleton - same instance
const s1 = container.resolve('SingletonService');
const s2 = container.resolve('SingletonService');
console.log(s1 === s2); // true
// Transient - new instance each time
const t1 = container.resolve('TransientService');
const t2 = container.resolve('TransientService');
console.log(t1 === t2); // false