This page is also available in English.

Continue in English
v0.1.3 · Zero dipendenze

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.

  • Zero dipendenze a runtime
  • TypeScript strict
  • ESM & CJS, tree-shakable

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.

resolve(token) Token Container Factory Instance in cache se Singleton Un identificatore basato su symbol che porta il tipo del servizio Cerca la registrazione, traccia il percorso di risoluzione Costruisce l’istanza, risolvendo le proprie dipendenze dal container Cache se Singleton, nuova ogni volta se Transient

Quick Start

Questo è l’intero modello mentale. Non c’è nessun passaggio che non stai vedendo.

ts
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'));

Leggi la guida completa

per navigare per selezionare Esc per chiudere