Zunächst einmal haben wir wahrscheinlich eine ungewöhnliche angular2 Architektur, wo wir mehrere Komponenten (Widgets) auf einer einzigen Seite Bootstrap und nicht eine einzige App-Komponente, die alles behandelt.Angular2 Bootstrap Provider vs bietet Array in Komponente
Meine erste Frage ist, ob die folgenden zwei Implementierungen gleich sind, von dem, was ich verstanden, sie sind (bitte korrigieren Sie mich, wenn ich etwas falsch verstanden):
bootstrap(SomeComponent, [HTTP_PROVIDER, FooService, ServiceNeededByFoo])
Dies initialisiert SomeComponent und stellt die Anbieter für die drei Dienste dort. Auf diese Weise kann SomeComponent FooService in seinem eigenen Konstruktor auflösen, und FooService kann ServiceNeededByFoo auflösen, da es in SomeComponent (dem übergeordneten) nachgeschlagen wird.
Wenn ich
providers: [HTTP_PROVIDER, FooService, ServiceNeededByFoo]
innerhalb SomeComponent definieren, kann ich es wie so initialisieren:
bootstrap(SomeComponent)
Also von dem, was ich verstehe diese völlig gleich sein sollte, eine neue Instanz für FooService und ServiceNeededByFoo auf der Ebene von SomeComponent wird erstellt und für alle untergeordneten Elemente von SomeComponent freigegeben, die ebenfalls FooService benötigen. Wenn es das gleiche ist, gibt es einen bevorzugten/empfohlenen Weg?
Die zweite Frage ist nun, wie kann ich eine einzelne Instanz FooService über Komponenten teilen, die nicht in der gleichen DI Hierarchie sind:
bootstrap(SomeComponent1, FooService)
bootstrap(SomeComponent2, FooService)
wo die FooService sollte die gleiche Instanz sein. Etwas wie:
var foo = new FooService();
foo.expensiveInit();
bootstrap(SomeComponent1, provide(FooService, {instance: foo}))
bootstrap(SomeComponent2, provide(FooService, {instance: foo}))
Die bereitgestellten Methoden und die Provider-Klasse werden nun ab rc3 entzogen, ich habe den Ersatz noch nicht gefunden, da die Kommentare im Code einfach "TODO: improved docs" sagen – Tom