beroendeinjektion - @Inject utanför Angular2-applikation
Är det möjligt att hämta någon @Injectable som:
var config = @Inject(Config);
Tack
Svar #1
Om du vill få nya instanser från beroendeinjektion behöver du en referens till Injector och sedan kan du skaffa nya instanser med
injector.get(Config);
Hur du kan få en referens till Injector beror på var din kod är.
I en Angular-komponent eller tjänst, injicera den bara
constructor(private injector:Injector) {}
Du kan också bara skapa din egen injektor som
var injector = Injector.resolveAndCreate([Car, Engine]);
där Car och Engine är de leverantörer som injektorn kan skapa instanser för.
För att få injektorn i din Angular-applikation att användas utanför din Angular-applikation kan du använda
Exempel från https://github.com/angular/angular/issues/4112#issuecomment-153811572
let appInjectorRef: Injector;
export const appInjector = (injector?: Injector):Injector => {
if (injector) {
appInjectorRef = injector;
}
return appInjectorRef;
};
bootstrap(App, [
Auth,
HTTP_PROVIDERS,
ROUTER_PROVIDERS,
Car,
Engine
]).then((appRef: ComponentRef) => {
// store a reference to the application injector
appInjector(appRef.injector);
});
let injector: Injector = appInjector();
injector.get(Car);
Svar #2
Jag tyckte det var lättare att deklarera injector som en global variabel så att jag kunde använda den lite enklare.
I filen där du startar upp Angular:
declare global {
var injector: Injector;
}
bootstrap(/* your bootstrap stuff */).then((appRef) => {
injector = appRef.injector;
});
Ovanstående kommer att ge dig tillgång till en injector-variabel var som helst annars i din kod.
I filen där du behöver en instans av Config:
import { Config } from './path/to/config.service';
class TestClass {
private config: Config;
constructor() {
this.config = injector.get(Config);
}
}
