[AngularJS面面观] 20. 依赖注入 --- instance注入器以及provider注入器

本文深入探讨AngularJS的依赖注入机制,分析instance和provider注入器的区别及工作原理,揭示了AngularJS如何通过这两个注入器隐藏复杂性,实现功能单一化的门面模式。
摘要由CSDN通过智能技术生成

本文就来解答上一篇文章留下的疑问,为什么在注入器也分成了instance注入器和provider注入器。这两种注入器的工作原理是怎么样的。

总体结构

为此我特别准备了一张图来描述一下angular注入器的工作流程和原理,如下所示。

angular注入器工作流程和原理

这张图的顶部是外部调用的入口,即通过angular暴露给外部的$injector服务。关于$injector服务中含有的五个方法,在$injector服务中已经介绍过了,在本文中就不再赘述了。还不清楚$injector服务是个啥的同学可以先去看看那篇文章。

那么暴露给外部使用的$injector是哪种注入器呢?从图中可以很清晰的看出,暴露的是实例注入器(Instance Injector)。所谓的实例注入器,就是用来保存各种被实例化了的托管对象。这些实例在实例化之后会被保存在它对应的一个叫做实例注入器缓存的地方,也就是图中的cache(instanceCache)所指向的区域。下面我们就来看看实例注入器的相关代码。

instance注入器

instanceCache = {},
protoInstanceInjector =
    createInternalInjector(instanceCache, function(serviceName, caller) {
   
      var provider = providerInjector.get(serviceName + providerSuffix, caller);
      return instanceInjector.invoke(
          provider.$get, provider, undefined, serviceName);
    }),
instanceInjector = protoInstanceInjector;

// createInternalInjector的函数签名
function createInternalInjector(cache, factory) {
    
  // ......
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值