A lightweight and flexible dependency injection system for JavaScript/TypeScript applications.
npm install @signe/di
# or
yarn add @signe/di
# or
pnpm add @signe/di
- Simple and intuitive API
- Type-safe dependency injection
- Provider system with multiple configuration options
- Context-based injection
- Override capabilities for testing and customization
- Support for nested providers
import { provide, inject, Context, Providers } from '@signe/di';
const context = new Context();
class UserService {
getUser(id: string) {
return { id, name: 'John Doe' };
}
}
class AuthService {
constructor(private config: any) {}
}
const providers: Providers = [
UserService,
{
provide: 'CONFIG',
useValue: {
apiUrl: 'https://api.example.com'
}
},
{
provide: AuthService,
useFactory: (context) => {
const config = inject(context, 'CONFIG');
return new AuthService(config);
}
}
];
// Provide the service
provide(context, providers);
// Inject and use the service
const userService = inject(context, UserService);
const user = userService.getUser('123');
import { override } from '@signe/di';
// Override existing provider
const newProviders = override(providers, {
provide: UserService,
useValue: new MockUserService()
});
// Add new provider with upsert option
const updatedProviders = override(providers, {
provide: 'NEW_SERVICE',
useValue: service
}, { upsert: true });
import { isInjected } from '@signe/di';
if (isInjected(context, UserService)) {
// Service is already injected
}
import { findProvider, findProviders } from '@signe/di';
// Find single provider
const userProvider = findProvider(providers, UserService);
// Find multiple providers by regex
const allServices = findProviders(providers, /Service$/);
Stores a value in the context for dependency injection.
Retrieves an injected value from the context.
Checks if a value has been injected.
Overrides or adds new providers to the existing provider array.
Finds a single provider by name or regex.
Finds all providers matching the query.
MIT © Samuel Ronce