[英]Is it possible to instantiate a class outside angular bootstrapModule and inject instance into the application?
[英]@Inject outside Angular2 application
是否可以檢索任何@Injectable
如:
var config = @Inject(Config);
謝謝
如果要從依賴項注入獲取新實例,則需要引用Injector,然后可以使用以下方法獲取新實例:
injector.get(Config);
如何獲得對Injector
的引用取決於代碼所在的位置。
在Angular組件或服務中,只需注入它
constructor(private injector:Injector) {}
您也可以像這樣創建自己的注射器
var injector = Injector.resolveAndCreate([Car, Engine]);
其中Car
和Engine
是噴射器可以為其創建實例的提供者。
要使Angular應用程序的注入器在Angular應用程序之外使用,您可以使用
來自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);
我發現將injector
聲明為全局變量更加容易,因此可以更輕松地使用它。
在引導角度文件中:
declare global {
var injector: Injector;
}
bootstrap(/* your bootstrap stuff */).then((appRef) => {
injector = appRef.injector;
});
上面的代碼使您可以訪問代碼中其他任何位置的injector
變量。
在需要Config
實例的文件中:
import { Config } from './path/to/config.service';
class TestClass {
private config: Config;
constructor() {
this.config = injector.get(Config);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.