Mam @Injectable
usługę zdefiniowaną w bootstrapie. Chcę uzyskać wystąpienie usługi bez użycia iniekcji konstruktora. Próbowałem użyć, ReflectiveInjector.resolveAndCreate
ale wydaje się, że tworzy nową instancję.
Powodem, dla którego próbuję zrobić, jest to, że mam podstawowy komponent pochodzący z wielu komponentów. Teraz potrzebuję dostępu do usługi, ale nie chcę jej dodawać do ctora, ponieważ nie chcę wstrzykiwać usługi do wszystkich składników pochodnych.
TLDR: Potrzebuję ServiceLocator.GetInstance<T>()
AKTUALIZACJA: Zaktualizowany kod dla RC5 +: Przechowywanie instancji wtryskiwacza do użycia w komponentach
@SkipSelf()
. Możesz także powiązaćparent
getter, aby uzyskać wtryskiwacz root.W zaktualizowanym Angular, w którym używane są ngModules, możesz utworzyć zmienną dostępną w dowolnym miejscu kodu:
Teraz możesz użyć,
AppInjector
aby znaleźć dowolną usługę w dowolnym miejscu kodu.źródło
Inne podejście polegałoby na zdefiniowaniu niestandardowego dekoratora (a
CustomInjectable
do ustawienia metadanych do wstrzykiwania zależności:Wykorzysta metadane z konstruktora nadrzędnego zamiast własnych. Możesz go użyć na klasie podrzędnej:
Zobacz to pytanie, aby uzyskać więcej informacji:
źródło
StoreService .ts
component.ts
źródło