7

Sto lavorando a un progetto TypeScript di Ionic 2. Durante l'avvio dell'applicazione, inietto un servizio tramite il costruttore.Iniezione di dipendenza nell'angolare 2 Crea istanze multiple durante l'uso di Inline Injector e Injection del costruttore

@App({ 
    providers: [ MyService ] 
}) 
export class MyApp { 
    constructor(private instance1 : MyService){} 
} 

E in un'altra classe I utilizzare

let injector = Injector.resolveAndCreate ([ MyService ]); 
let instance2 = injector .get(MyService ); 

ottengo due diversi istanza di variabili INSTANCE1 e instance2.

C'è un modo possibile per rendere loro come un esempio utilizzando l'iniettore in linea e Constructor

+0

il comportamento è previsto (vedi la mia risposta). Per essere in grado di suggerire una soluzione avrei bisogno di sapere di più sul tuo caso d'uso –

risposta

2

"Singletons" sono mantenuti per ogni istanza provider. Se si crea un nuovo Injector (che è quello che Injector.resolveAndCreate ([ MyService ]); fa, allora ha anche un proprio istanze di provider. Pertanto è previsto il comportamento.

È possibile iniettare il Injector al componente e il servizio e creare un iniettore bambino che poi potrebbe funzionare come previsto.

Se avete bisogno di un iniettore in cui non è possibile iniettare l'iniettore angolare, c'è una soluzione spiegata in questo commento (con Plunker) https://github.com/angular/angular/issues/4112#issuecomment-153811572

+1

Basta aggiungere 'iniettore: Injector' come parametro costruttore. Puoi usarlo per richiedere istanze (penso che fosse 'injector.get (SomeType)') o per creare iniettori di bambini. Sono solo al telefono quindi non più dettagli. –

+0

Grazie Gunter – tymspy