Angular快速入门 —— 服务与依赖注入

服务

从代码中可以看到,服务就是一个普通的类,类里面定义了一些实例函数。服务提供了一些特定的功能,通常使用在组件内部,作为组件功能的一个扩展。服务怎么样才能被组件使用呢?这时候需要引入依赖注入机制。


依赖注入

依赖注入机制是组件引入外部构建(如服务)的一种机制。最常用的就是引用服务,组件引入服务,实际上是引用的服务类的实例,所以服务被引入之前,会有一个实例化的过程。通常这个实例要被缓存起来,以备其它组件使用。所以管理实例化以及实例缓存的过程正是依赖注入所实现的。服务的实例存储在依赖注入机制建立的依赖注入器对象里。当组件需要依赖某个服务的时候,依赖注入机制会从注入器对象里查找匹配的实例。找到后便执行注入操作。


依赖注入示例

Providers属性是依赖注入的关键步骤。依赖注入机制会根据Providers提供的服务类型,这里是LoggerService,预先实例化这个对象,并缓存到注入器里。然后我们发现组件构造函数里面也有一个LoggerService类型的参数。这种指定类型的语法是Typescript提供的。依赖注入机制会根据构造函数里面的参数需求从注入器对象里查找这个LoggerService实例,找到后传入到组件的构造函数里。最终组件便获得LoggerService的实例引用,这就是Angular2的依赖注入基本流程。


分层注入

举个例子,这里有一个简单的组件树。当我们在根组件注入LoggerService日志服务的时候,那么整个组件树都能够使用到根组件的这个日志服务实例,而且是保证单例的形态。所以我们在根组件设置日志服务级别为warn的时候,整个组件树使用的日志服务级别都是warn级别的。这样的情况只需LoggerService实例化并且配置一次就可以使用在这个应用里。但是开发一段时间后,程序越来越复杂。假如我们需要在子组件B能够打印出更多的日志,也就是它的日志级别更低。如果这时候在修改LoggerService的日志级别能达到效果吗?很显然不行的。记住这个LoggerService是单例,无论在哪里修改配置,影响的都是同一个实例。这时候需要拿出分层注入的秘密武器。分层注入需要我们在适当的位置里重新创建一个新的实例。只需要在对应的组件重新注入即可。所以我们子组件B重新注入LoggerService,并且设置该实例日志服务级别为debug.重新注入之后,子组件B以及它所有子组件都会使用这个全新的debug级别日志服务实例。这就是分层注入的概念,分层注入的概念源于组件树里面的不能层级。分层注人不会影响到组件树里面其它分支。所以根组件以及子组件A仍然使用原来的warn级别日志服务。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,951评论 19 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,958评论 6 342
  • 最近两周比较忙,上周末第一次用 Go 开发 terraform provider,2 天折腾,还算成功演示交付出去...
    Jeff阅读 164评论 0 0
  • 某人善画竹,名满天下。可他的老师对他说,你尚未入门。问:如何得入。答:要在心里觉得你就是竹子。其人乃去,终日站在竹...
    觉智师兄阅读 1,216评论 1 1
  • 上午被简书电影专栏推荐的一部长达20多分钟的纪录片所震撼了,看完过后,感觉自己也想写点什么。于是就想把半年前落下的...
    小将呼呼阅读 9,399评论 0 4