0.0.4 • Published 4 months ago
bindbox v0.0.4
📦 BindBox
BindBox is a dependency injection container.
Installation
npm i bindbox reflect-metadata
Example
import { Container, ParamTypes, createTypeId } from 'bindbox';
import 'reflect-metadata';
// contracts
export interface LoggerContract {
log(message: string): void;
}
export interface StorageContract {
get(key: string): string | null;
set(key: string, value: string): void;
remove(key: string): void;
}
// implementations
export class Logger implements LoggerContract {
log(message: string): void {
console.log(message);
}
}
export class LocalStorage implements StorageContract {
constructor(private logger: LoggerContract) {
this.logger.log('LocalStorage inited');
}
get(key: string): string | null {
return localStorage.getItem(key);
}
set(key: string, value: string): void {
localStorage.setItem(key, value);
}
remove(key: string): void {
localStorage.removeItem(key);
}
}
export class MemoryStorage implements StorageContract {
#data = new Map<string, string>();
constructor(private logger: LoggerContract) {
this.logger.log('MemoryStorage inited');
}
get(key: string): string | null {
return this.#data.get(key) ?? null;
}
set(key: string, value: string): void {
this.#data.set(key, value);
}
remove(key: string): void {
this.#data.delete(key);
}
}
// tokens
export const TStorage = createTypeId<StorageContract>('Storage');
export const TLogger = createTypeId<LoggerContract>('Logger');
// annotations
ParamTypes.define(LocalStorage, [TLogger]);
ParamTypes.define(MemoryStorage, [TLogger]);
// usage
const container = new Container();
container.bind(TStorage).to(MemoryStorage).inSingleton();
container.bind(TLogger).to(Logger).inSingleton();
const storage = container.get(TStorage);
storage.set('some', 'value');
0.0.3
4 months ago
0.0.2
4 months ago
0.0.1-beta.2
4 months ago
0.0.4
4 months ago
0.0.1-beta.1
9 months ago
0.0.1-beta.0
9 months ago
0.0.0
9 months ago