Lifetime
TinyDI supporta esattamente due lifetime, tramite l'enum ServiceLifetime. Non c'è una terza opzione, né rilevamento automatico — dichiari tu il lifetime che vuoi.
enum ServiceLifetime {
Singleton,
Transient,
}
Singleton
Il default. La prima volta che un token viene risolto, la sua factory viene eseguita una volta sola; ogni chiamata successiva a resolve() per lo stesso token restituisce la stessa istanza.
container.registerFactory(ClockToken, () => new SystemClock()); // Singleton di default
container.resolve(ClockToken) === container.resolve(ClockToken); // true
registerInstance è sempre Singleton — stai passando al container un'istanza già esistente, quindi non potrebbe essere altro.
Transient
Viene creata una nuova istanza ad ogni chiamata a resolve().
container.registerFactory(RequestIdToken, () => crypto.randomUUID(), ServiceLifetime.Transient);
container.resolve(RequestIdToken) === container.resolve(RequestIdToken); // false
Come scegliere
- Usa Singleton di default per servizi stateless e risorse condivise (repository, client HTTP, logger).
- Ricorri a Transient solo quando ogni risoluzione ha davvero bisogno di un'istanza nuova — un identificatore per-operazione, un builder che accumula stato durante un solo utilizzo.
Nessun lifetime Scoped, per ora
Questa versione include deliberatamente solo Singleton e Transient. Un futuro lifetime Scoped (istanze per-request) è un'estensione naturale che il design non preclude, ma non fa parte dell'API attuale.