I have a @Injectable
service defined in bootstrap. I want to get the instance of the service without using constructor injection. I tried using ReflectiveInjector.resolveAndCreate
but that seem to create a new instance.
The reason I'm trying to do is I have a base component derived by many components. Now I need to access a service but I don't want to add it to the ctor because I don't want to inject the service on all of the derivative components.
TLDR: I need a ServiceLocator.GetInstance<T>()
UPDATE: Updated code for RC5+: Storing injector instance for use in components
Another approach would consist of defining a custom decorator (a
CustomInjectable
to set the metadata for dependency injection:It will leverage the metadata from the parent constructor instead of its own ones. You can use it on the child class:
See this question for more details:
In the updated Angular where ngModules are used, you can create a variable available anywhere in the code:
Yes,
ReflectiveInjector.resolveAndCreate()
creates a new and unconnected injector instance.You can inject Angulars
Injector
instance and get the desired instance from it usingYou also can store the
Injector
in some global variable and than use this injector instance to acquire provided instances for example like explained in https://github.com/angular/angular/issues/4112#issuecomment-153811572