Aurelia Typescript DI - 实例化HTTP提取

时间:2016-06-06 07:19:55

标签: dependency-injection typescript aurelia

我在Aurelia TS骨架中关于依赖注入的基本示例遇到了一些麻烦。第一个困惑是首先实例化单例。例如,在github示例框架中,他们在users.ts中实例化HttpClient:

constructor(public http: HttpClient) {
  http.configure(config => {
    config
     .useStandardConfiguration()
     .withBaseUrl('https://api.github.com/');
    });
}

但我不想在每个课程中都这样做,所以我假设我会将代码放在main.ts中,因为这是在应用程序启动时运行的。但是main.ts没有构造函数,当我尝试包含@inject(HttpClient)时,它会出错。 main.ts是放置此代码的适当位置,如果是,我该怎么做?

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

您可以使用container.get对象上的aurelia方法来利用main.ts中的依赖注入容器:

<强> main.ts

import { HttpClient } from 'aurelia-http-client';

export function configure(aurelia) {

    let httpClient = aurelia.container.get(HttpClient);
    http.configure(config => {
      config
        .useStandardConfiguration()
        .withBaseUrl('https://api.github.com/');
      });      
}

答案 1 :(得分:2)

我在JS(https://github.com/aurelia/dependency-injection/issues/73)中找到了一个类似的问题,并为Typescript修改了它,它似乎正在起作用。以下是我需要它的人。不确定它是否是最好的答案,但它确实有效:

main.ts

bootstrap((aurelia: Aurelia): void => {
  aurelia.use
    .standardConfiguration()
    .developmentLogging();

  var http: HttpClient = new HttpClient();
  http.configure(config => {
  config
    .useStandardConfiguration()
    .withBaseUrl('https://api.github.com/');
  });      
  aurelia.container.registerInstance(HttpClient, http);

  const rootElem = document.body;
  aurelia.start().then(() => aurelia.setRoot('app', rootElem));
  rootElem.setAttribute('aurelia-app', '');
});