@Inject在Angular2应用程序之外

时间:2016-04-07 03:27:51

标签: dependency-injection typescript angular

是否可以检索任何@Injectable之类的内容:

var config = @Inject(Config);

由于

2 个答案:

答案 0 :(得分:1)

如果您想从依赖注入中获取新实例,则需要引用Injector,然后您可以使用

获取新实例
injector.get(Config);

如何获取Injector的引用取决于代码的位置 在Angular组件或服务中,只需注入它

constructor(private injector:Injector) {}

您也可以像

一样创建自己的注射器
var injector = Injector.resolveAndCreate([Car, Engine]);

其中CarEngine是注入者可以为其创建实例的提供者。

要使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);

答案 1 :(得分:1)

我发现将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);
    }
}