Requisiti
C'è uno stato di applicazione "globale" (per ragioni di discussione) che mi interessa iniettare nei componenti.
Ogni componente candidato dovrebbe ricevere un'istantanea immutabile dello stato esistente al momento in cui è stato richiamato il suo costruttore (per chiarezza assoluta, lo snapshot di stato che viene iniettato nel costruttore di ciascun componente non deve cambiare quando lo stato globale cambia).
Vincoli
Non posso (e non desidero) utilizzare un servizio di livello root o una costante globale da cui i componenti richiedono un'istantanea di stato. Una soluzione del genere richiederebbe che un componente richieda esplicitamente uno snapshot di stato (dal servizio inserito o dalla costante globale) dal suo costruttore, perché se tentasse di recuperarlo successivamente nel suo ciclo di vita, lo stato potrebbe essere cambiato e non essere più rilevante ad esso.
Voglio evitare di dover dichiarare un servizio iniettato localmente all'interno dell'array dei provider di ciascun componente client. Questo è inutilmente gravoso. I client devono essere in grado di iniettare semplicemente un tipo (o token di iniezione) e ricevere uno snapshot di stato.
Problema
Sebbene un metodo di produzione di iniezione sembrasse in superficie una soluzione ovvia (copiava lo stato globale e lo restituiva all'iniettore, che a sua volta lo passava al costruttore del componente), la fabbrica viene invocata una sola volta ( per ogni livello nella gerarchia di iniezione per la quale è stato configurato un provider). Capisco che questo è di progettazione, tuttavia penso che ci sia un buon caso d'uso per la funzionalità che ho descritto.
Ciò che potrebbe funzionare è un'implementazione di una fabbrica di iniezione simile nel concetto a tubi angolari puri e impuri, in cui una fabbrica (o potenzialmente qualsiasi configurazione di iniezione) potrebbe essere dichiarata "impura", il che comporterebbe l'iniezione di una nuova istanza in ogni componente dipendente.
Sicuramente c'è un modo per farlo?