A lightweight Dependency Injection container.
Supports registering and resolving dependencies as singletons or transients, with built-in circular dependency detection.
const container = DIContainer.getInstance()// Register a singletoncontainer.registerSingleton('config', () => ({ port: 3000 }))// Register a transientcontainer.registerTransient('logger', (c) => new Logger())// Resolve dependenciesconst config = container.resolve('config')const logger = container.resolve('logger') Copy
const container = DIContainer.getInstance()// Register a singletoncontainer.registerSingleton('config', () => ({ port: 3000 }))// Register a transientcontainer.registerTransient('logger', (c) => new Logger())// Resolve dependenciesconst config = container.resolve('config')const logger = container.resolve('logger')
Check if a dependency is registered.
The dependency token
True if the token is registered
Get all registered dependency tokens.
Array of registered tokens
Register a singleton dependency (same instance always).
The type of the dependency
Unique identifier for the dependency
Function to create the instance
Error if the token is already registered
Register a transient dependency (new instance each time).
Function to create instances
Clear all registered dependencies and resolution state (for testing purposes).
Resolve a registered dependency.
The resolved instance
Error if the token is not registered or circular dependency is detected
Resolve an optional dependency (returns null if not registered).
The resolved instance or null if not found
Static
Get or create the singleton container instance.
The global DIContainer instance
A lightweight Dependency Injection container.
Supports registering and resolving dependencies as singletons or transients, with built-in circular dependency detection.
Example