Container
Container è l'unica classe che TinyDI ha. Un'istanza possiede un insieme di registrazioni, indicizzate per token.
const container = new Container();
registerInstance
Registra un'istanza già creata. È sempre trattata come Singleton — ogni chiamata a resolve() restituisce esattamente quell'oggetto.
const ConfigToken = createToken<Config>('Config');
container.registerInstance(ConfigToken, { apiUrl: 'https://example.com' });
registerFactory
Registra una factory usata per costruire il servizio in modo lazy, alla prima risoluzione. La factory riceve il container stesso, così può risolvere le proprie dipendenze in modo esplicito.
container.registerFactory(
UserServiceToken,
(c) => new UserService(c.resolve(UserRepositoryToken)),
);
Il terzo argomento, opzionale, è un ServiceLifetime — di default è Singleton.
resolve
Risolve il servizio registrato sotto un token, completamente tipizzato senza generic esplicito.
const userService = container.resolve(UserServiceToken);
Casi limite
Lancia ResolutionError se il token non è mai stato registrato, e CircularDependencyError se risolverlo richiederebbe di risolvere se stesso di nuovo — vedi API Reference per la forma esatta degli errori.
has, remove, clear
Gestisci direttamente l'insieme delle registrazioni: has(token) controlla se un token è registrato, remove(token) rimuove una singola registrazione, e clear() le rimuove tutte.
container.has(ConfigToken); // true
container.remove(ConfigToken);
container.has(ConfigToken); // false
container.clear(); // rimuove tutte le registrazioni
Sostituire una registrazione
Registrare un token già registrato lancia RegistrationError, di proposito. Chiama prima remove() — utile deliberatamente per sostituire un'implementazione finta tra un test e l'altro. Vedi Testing per il pattern completo.