This page is also available in English.

Continue in English

Confronto

La maggior parte dei container DI nell'ecosistema TypeScript si appoggia a reflect-metadata e ai decorator per la scoperta automatica delle dipendenze. TinyDI prende la posizione opposta — ecco esattamente come si confronta questo compromesso.

TinyDI vs. TSyringe

TinyDITSyringe
Scoperta delle dipendenzeEsplicita, tramite factoryAutomatica, tramite decorator + reflect-metadata
Decorator richiestiNoSì (@injectable, @inject, ...)
Flag del compilatore richiestiNessunoexperimentalDecorators, emitDecoratorMetadata
Dipendenze a runtimeNessunareflect-metadata
Identità dei tokenToken<T> basato su symbolToken stringa o classi
LifetimeSingleton, TransientSingleton, Transient, ResolutionScoped, ContainerScoped

TSyringe è un'ottima scelta se vuoi la constructor injection automatica e non ti dispiace avere decorator e reflect-metadata nel progetto. TinyDI scambia quella comodità con esplicitezza e una superficie più piccola.

TinyDI vs. InversifyJS

TinyDIInversifyJS
Scoperta delle dipendenzeEsplicita, tramite factoryAutomatica, tramite decorator + reflect-metadata
Decorator richiestiNoSì (@injectable, @inject, ...)
Flag del compilatore richiestiNessunoexperimentalDecorators, emitDecoratorMetadata
Dipendenze a runtimeNessunareflect-metadata
Concetti da imparareToken, Container, ServiceLifetimeContainer, moduli, binding, scope, middleware
LifetimeSingleton, TransientSingleton, Transient, Request, scope personalizzati

InversifyJS offre un set di funzionalità molto più ampio (moduli, middleware, multi-injection, tagging) al costo di una superficie API più grande e di una dipendenza a runtime dalla reflection. TinyDI copre intenzionalmente una fetta molto più piccola e semplice dello stesso problema.

TinyDI vs. una composition root scritta a mano

Molti developer esperti evitano del tutto un container DI: un unico file collega ogni dipendenza a mano con semplici chiamate a funzione. È proprio quella composition root, non un altro container, il vero concorrente di TinyDI nella maggior parte dei casi.

TinyDIComposition root scritta a mano
Scoperta delle dipendenzeEsplicita, tramite factoryEsplicita, tramite semplici chiamate a funzione
Rilevamento dipendenze circolariAutomatico — lancia CircularDependencyError con il ciclo completoManuale — un ciclo lancia un errore runtime non correlato oppure si risolve silenziosamente in undefined, a seconda dell'ordine di caricamento dei moduli
Gestione dei lifetimeIntegrata: Singleton o Transient, scelta per ogni registrazioneScritta a mano: i singleton sono tipicamente costanti a livello di modulo, i transient richiedono una funzione factory manuale
Sostituire implementazioni nei testremove() + registerInstance() su qualsiasi tokenDi solito richiede di modificare la composition root stessa, o un punto di passaggio manuale dei parametri
Costo a runtimeUna lookup su Map per ogni chiamata a resolve()Nessuno — chiamate a funzione dirette
Concetti da imparareToken, Container, ServiceLifetimeNessuno — è il linguaggio che già conosci

Una composition root scritta a mano è una scelta perfettamente valida per un progetto piccolo con poche dipendenze. TinyDI ripaga soprattutto quando il debug delle dipendenze circolari, la gestione coerente dei lifetime, o la sostituzione di finte implementazioni nei test iniziano a costare tempo reale da fare a mano.

per navigare per selezionare Esc per chiudere