依赖注入和httpclient

时间:2019-01-30 13:39:27

标签: angular dependency-injection angular7

我试图理解Angular 7中的DI。DI用于实例化可注入的类的对象。

需要知道我们如何将其应用于apache poi

我知道我们可以像下面这样注入

org.apache.poi.ss.usermodel.DateUtil

但是我们怎么知道HttpClient是可注射的?

问题看起来很愚蠢。由于我是Angular的新手,所以我试图了解其逻辑。

1 个答案:

答案 0 :(得分:1)

基本上,因为导入HttpClientModule时,它告诉Angular依赖项注入器他可以在需要时提供HttpClient

这是通过

完成的

1)将类HttpClient装饰为@Injectable()

2)拥有一个模块HttpClientModule,该模块可以导入{em>提供 HttpClient

3)当然,所有操作都由Angular依赖注入器完成,这是框架的基础。它正在研究各种模块及其providers的配置参数。 (以及其他一些与Angular 6+相关的数据)


如果要创建自己的可注射服务,基本上应该执行相同的操作(1和2)。


以下文档和相关的Angular源代码片段:

https://angular.io/api/common/http/HttpClientModule

  

HttpClientModule

     

为HttpClient配置依赖项注入程序并提供支持   XSRF的服务。由HttpClientModule自动导入。


source code for HttpClient

(第56行附近)

/**
 * Perform HTTP requests.
 *
 * ....
 */
@Injectable()   // <- this marks the class as Injectable (which basically makes it a Service in Angular framework)
export class HttpClient {
// ...

Source code for HttpClientModule

(大约143行)

@NgModule({
  /**
   (...)
   * Configures the [dependency injector](guide/glossary#injector) where it is imported
   * with supporting services for HTTP communications.
   */
  providers: [
    HttpClient,    // <- here this is how the injector system is aware of HttpClient being injectable, if you import this module
  (...)
  ]
})
export class HttpClientModule {
}

(我在上述摘要中用// <-注释的我自己的评论)


也值得一读:

https://angular.io/guide/glossary#injector

https://angular.io/guide/dependency-injection


一个有趣的有趣博客,介绍了有关细节以及现代(Angular 6+)注入方式(具有摇树功能):

https://medium.com/@tomastrajan/total-guide-to-angular-6-dependency-injection-providedin-vs-providers-85b7a347b59f

(Angular 2的)依赖项注入系统的机制中还有一个更重要的方面:https://blog.thoughtram.io/angular/2015/05/18/dependency-injection-in-angular-2.html#dependency-injection-in-angular

最后一个涉及更深层次的技术: https://blog.angularindepth.com/angular-dependency-injection-and-tree-shakeable-tokens-4588a8f70d5d