Container DI con InversifyJS
Registri e risolva i servizi con un container.
Container DI con InversifyJS è una lezione TypeScript Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento TypeScript Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso TypeScript Academy include 4 lezioni in totale.
Perché usare un container DI?
Configurare manualmente grafi di oggetti di grandi dimensioni è tedioso e soggetto a errori. Un container DI registra come costruire ogni dipendenza e le risolve automaticamente. InversifyJS è un container TypeScript molto diffuso.
Installazione e abilitazione
InversifyJS si basa sui decoratori e sui metadati di riflessione. Si importa da inversify e si abilitano experimentalDecorators e reflect-metadata.
import "reflect-metadata";
import { Container, injectable, inject } from "inversify";Contrassegnare le classi con @injectable
Il decoratore @injectable() indica al container che una classe può essere costruita e iniettata. Ogni classe costruita dal container ne ha bisogno.
import { injectable } from "inversify";
@injectable()
class ConsoleLogger {
log(m: string) { console.log(m); }
}Dichiarare le dipendenze con @inject
Si utilizza @inject(token) sui parametri del costruttore per indicare al container quale binding fornire. Il token identifica la dipendenza.
@injectable()
class OrderService {
constructor(@inject("Logger") private logger: ConsoleLogger) {}
place() { this.logger.log("placed"); }
}Creare un container
Un Container contiene tutti i binding dell'applicazione. Se ne crea uno all'avvio e vi si registrano le dipendenze.
import { Container } from "inversify";
const container = new Container();Associare un'interfaccia a Impl
L'API fluente bind<T>(token).to(Impl) associa un token, spesso un'interfaccia, a una classe concreta che il container istanzierà.
interface Logger { log(m: string): void; }
container.bind<Logger>("Logger").to(ConsoleLogger);Risoluzione dei servizi
container.get<T>(token) costruisce il servizio richiesto, creando e iniettando ricorsivamente le sue dipendenze.
container.bind<OrderService>(OrderService).toSelf();
const svc = container.get<OrderService>(OrderService);
svc.place();Sostituire le implementazioni
Per usare un logger diverso, è sufficiente associare nuovamente il token a un'altra classe. I consumatori rimangono invariati perché dipendono dal token, non dalla classe concreta.
@injectable()
class SilentLogger implements Logger { log() {} }
container.rebind<Logger>("Logger").to(SilentLogger);Ambito singleton
Per impostazione predefinita, ogni get può creare una nuova istanza. Si utilizza inSingletonScope() per condividere una sola istanza nell'intera app.
container.bind<Logger>("Logger").to(ConsoleLogger).inSingletonScope();Testare con il container
Nei test è possibile creare un container nuovo e associarvi dei fake, ottenendo gli stessi vantaggi nella configurazione e isolando l'unità sottoposta a test.
const testContainer = new Container();
testContainer.bind<Logger>("Logger").to(SilentLogger);Compromessi dei container
I container riducono il codice ripetitivo nei grafi di grandi dimensioni, ma aggiungono una dipendenza, decoratori e un livello di indirezione. Per le app piccole, l'iniezione manuale tramite costruttore è spesso più chiara.
Verifica rapida
Verifica rapida di questa lezione.
Riepilogo
InversifyJS usa @injectable, @inject(token) e un Container. Si esegue bind<Interface>(token).to(Impl) e container.get risolve automaticamente il grafo. Sono necessari reflect-metadata e i decorator, in cambio di meno codice ripetitivo ma con maggiore indirezione.
Domande Frequenti
La lezione «Container DI con InversifyJS» è gratuita?
Sì — il testo completo di «Container DI con InversifyJS» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso TypeScript Academy, passa a CoddyKit PRO. Il corso TypeScript Academy include 4 lezioni in totale.
Cosa imparerò in «Container DI con InversifyJS»?
Registri e risolva i servizi con un container. Eserciti TypeScript Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare TypeScript Academy?
Non è richiesta alcuna esperienza precedente. TypeScript Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «Container DI con InversifyJS»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione TypeScript Academy?
Sì. Ogni lezione TypeScript Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Basi dell’inversione del controllo
- Dependency injection tramite costruttore
- Container DI con InversifyJS
- Token di servizio type-safe