【问题标题】:How to create an Http instance without using constructor DI?如何在不使用构造函数 DI 的情况下创建 Http 实例?
【发布时间】:2017-01-05 15:50:15
【问题描述】:

出于某种原因,我不想使用构造函数(private http: Http) DI。

看了https://angular.io/docs/ts/latest/api/http/index/Http-class.html

试过了

const injector = ReflectiveInjector.resolveAndCreate([
  BaseRequestOptions,
  XHRConnection,
  {
    provide: Http,
    useFactory: (backend, defaultOptions) => new Http(backend, defaultOptions),
    deps: [XHRConnection, BaseRequestOptions]
  }
]);

this.http = injector.get(Http);

错误提示

原始异常:无法解析“XHRConnection”的所有参数(?,?,?)。确保所有参数都使用 Inject 进行修饰或具有有效的类型注释,并且 'XHRConnection' 使用 Injectable 进行修饰。

【问题讨论】:

    标签: http angular dependency-injection


    【解决方案1】:

    您需要提供HTTP_PROVIDERS:

    const injector = ReflectiveInjector.resolveAndCreate([
      HTTP_PROVIDERS,
      XHRConnection,
      {
        provide: Http,
        useFactory: (backend, defaultOptions) => new Http(backend, defaultOptions),
        deps: [XHRConnection, BaseRequestOptions]
      }
    ]);
    

    【讨论】:

    • HTTP_PROVIDERS 现已弃用。你有 RC.5+ 的例子吗?
    【解决方案2】:

    其实可以这么简单

    const injector = ReflectiveInjector.resolveAndCreate([
      HTTP_PROVIDERS
    ]);
    
    this.http = injector.get(Http);
    

    基于 Günter Zöchbauer 的回答。

    【讨论】:

    • HTTP_PROVIDERS 现已弃用。你有 RC.5+ 的例子吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-20
    相关资源
    最近更新 更多