Dependency Injection Moderna e Type-Safe, Senza Reflection
Un container di Dependency Injection per TypeScript minimale, type-safe e senza decorator. Niente reflection. Niente decorator. Niente metadata. Solo codice esplicito, leggibile dall’inizio alla fine.
Explicit over magic
Ogni compromesso di TinyDI è deliberato. Ecco esattamente cosa ottieni, detto senza fronzoli.
Zero Dipendenze
Nessun reflect-metadata, nessun decorator, nessuna libreria a runtime. `npm ls` su TinyDI non mostra nulla.
Token Type-Safe
`resolve(token)` inferisce il tipo esatto del servizio. Nessun generic esplicito, nessun cast `as`.
Supporto Singleton
Il lifetime di default. Un’istanza, costruita una volta, riusata ad ogni risoluzione.
Supporto Transient
Una nuova istanza ad ogni chiamata a `resolve()`, quando è davvero ciò che ti serve.
Framework Agnostic
TypeScript puro. Funziona identico su Node.js, Bun, Deno e nel browser — Vue, React, Nuxt, o nessuno di questi.
Runtime Minuscolo
L’intero container è una lookup su `Map` e una chiamata a funzione. Nessun costo di avvio per "scoprire" il grafo.
Come funziona davvero la risoluzione
Nessun passaggio nascosto. Un token identifica un servizio; il container cerca la sua registrazione e chiama la factory, che risolve le proprie dipendenze allo stesso modo.
Quick Start
Questo è l’intero modello mentale. Non c’è nessun passaggio che non stai vedendo.
import { Container, createToken } from 'tinydi-container';
interface IGreeter {
greet(name: string): string;
}
class EnglishGreeter implements IGreeter {
greet(name: string): string {
return `Hello, ${name}!`;
}
}
const GreeterToken = createToken<IGreeter>('Greeter');
const container = new Container();
container.registerInstance(GreeterToken, new EnglishGreeter());
const greeter = container.resolve(GreeterToken); // tipizzato come IGreeter
console.log(greeter.greet('TinyDI'));