Angular的依赖注入(依赖反转)原理说明

依赖注入(依赖反转)意思是由函数决定要引入什么样的依赖:

let mod = angular.module(‘test‘,[]);
mod.controller(‘test_c‘,function($scope,$interval){
    //这里就引入两个依赖$scope和$interval
})

//神奇的是我所引入的依赖不受顺序、个数影响
//下面运用这些依赖的时候仍然杠杠的
mod.controller(‘test_c2‘,function($interval,$http,$scope){

})

这里就不得不佩服Angular作者的想法了,正常来说在js里面,我们可怜的函数只能被动地接受参数,甚至不知道自己能得到多少参数,什么类型的参数,这也是js天然的“烂语法”导致,我们聪明的作者就用一种挺简单的方法实现了依赖反转,由我们的函数来决定要什么依赖。

核心原理就是利用function的toString方法:

(function myFunction($scope,$interval){}).toString();//"function myFunction($scope,$interval){}"

这里明显可以用各种正则来匹配到我们形式参数了,匹配完之后controller在调用我们传入的函数的时候就按部就班地按照匹配到的形参,按照类别顺序依次个传入,完事~~

原文地址:https://www.cnblogs.com/amiezhang/p/8284575.html

时间: 2024-10-12 04:56:36

Angular的依赖注入(依赖反转)原理说明的相关文章

PHP关于依赖注入(控制反转)的解释和例子说明

PHP关于依赖注入(控制反转)的解释和例子说明 发表于2年前(2014-03-20 10:12)   阅读(726) | 评论(1) 8人收藏此文章, 我要收藏 赞2 阿里云双11绽放在即 1111 元红包即刻开抢!»   摘要 自从听到依赖注入这个设计模式,感觉很高大上,无奈楼主的眼光一直局限在国内框架上,也很少去关注设计模式方面的文章,直到某天遇到了laravel后,发现它手册里重点强调了一个名为“依赖注入”和“容器”的概念,但是对于这两个概念,手册里并未做基本的解释,所以楼主只能另外查找相

Helloworld之Spring依赖注入/控制反转(DI/IoC)版

Helloworld之Spring依赖注入/控制反转(DI/IoC)版 作者:雨水, 日期:2014-10-29 摘要:本文主要用于培训初学者理解Spring中的依赖注入的基本概念. 先介绍依赖注入的基本概念,然后以构造器注入为例实现了Helloworld实例. Spring依赖注入/控制反转 在我们通常的编程中,如果类A要依赖类B,通常是由A来创建一个B的实例.而Spring将创建B的实例的工作交给Spring容器来完成,然后注入A,因此称为依赖注入(DI, Dependency Inject

C#依赖注入控制反转IOC实现详解

原文:C#依赖注入控制反转IOC实现详解 IOC的基本概念是:不创建对象,但是描述创建它们的方式.在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务.容器负责将这些联系在一起. 举个例子,组件A中有类ClassA,组件B中有接口IB和其对应的实现类B1和B2. 那么,现在ClassA需要利用IB接口来做一些事情,例如: public class ClassA { public void DoSomething() { IB b = ??? b.DoWork(); }} 现

SpringIoc依赖注入依赖反转

Ioc容器主要实现的是控制反转,控制反转的实现手段是依赖注入,即原来具有依赖关系的类原先是由程序员自己new实例进行管理,现在是由spring容器来管理,当一个类需要另外一个类时,spring容器通过依赖注入的方式来实现.那么依赖注入的实现依靠的是依赖反转. 依赖反转:高级类获得低级类提供的服务,如果希望当低级类发生改变时高级类不发生改变,依赖反转是一个好的实现.依赖反转使得高级类依赖于低级类的抽象,低级类的实现依赖于低级类的抽象,这样原本强耦合的结构就能解耦了,他们相互依赖于抽象,抽象又是较为

分层,工厂模式,依赖注入控制反转

1.分层:就如同一个人自己制造一个锤子,自己动手丰衣足食.你需要他就自己new一个该实例.无法实现二者之间的松耦合 2.工厂模式:一个人需要一个锤子,他找工厂,工厂帮他造了一个锤子.工厂给你制造的锤子,但是如何造的你不需要知道.你直接调用该接口就可以了,具体你不需要知道.调用者无须关心被调用者具体实现过程,只需要找到符合某种标准(接口)的实例,即可使用 3.依赖注入:一个人需要一个锤子,他打电话给卖锤子的叫他送货上门.你喜欢哪家的锤子,直接叫哪家送货上门就OK.用者无须自己定位工厂,程序运行到需

Spring进阶之路(1)-Spring核心机制:依赖注入/控制反转

我们常常会遇到这样一种情景.就是在我们开发项目的时候常常会在一个类中调用其它的类中的方法,来完毕我们期望的任务.大部分的情况下往往会採用在当前需要的这个类里面new一个实例出来.然后调用他的方法,那么这种话会有个问题.就是有一天我想改变下这个类,改为其它的名称.那么这时候必需要做的是同一时候去调用方的类文件里改变这个改变的类的名称.这种情况是由于代码的耦合带来了后期维护成本的添加,那么spring的出现就能够非常好的起到解耦的作用,而他的核心机制就是依赖注入. 依赖注入与控制反转 依赖注入:对于

spring依赖注入方法及原理

依赖注入就是在程序运行时期,由外部容器动态的将依赖对象注入到组件中,通俗的理解是:平常我们new一个实例,这个实例的控制权是我们程序员,而控制反转是指new实例工作不由我们程序员来做而是交给spring容器来做. spring有多种依赖注入的形式,下面仅介绍spring通过xml进行IOC配置的方式: 1.set注入 这是最简单的注入方式,假设有一个PersonServiceBean,类中需要实例化一个PersonDao对象,那么就可以定义一个private的PersonDao成员变量,然后创建

再谈依赖注入(依赖注入的简单实现)

之前说过,依赖注入就是为了解决依赖的问题的,在Spring中,本来应该自己入new的对象自己不来new了,交给bean去new.其实使用反射可以实现依赖注入. 下面就是简单实现的方式: 使用反射可以new出新的实例,我们可以这么做: 1 public Object getInstance(String ClassName){ 2 private Object result=null; 3 try { 4 result=Class.forName(ClassName).newInstance();

ASP.NET Core依赖注入——依赖注入最佳实践

在这篇文章中,我们将深入研究.NET Core和ASP.NET Core MVC中的依赖注入,将介绍几乎所有可能的选项,依赖注入是ASP.Net Core的核心,我将分享在ASP.Net Core应用中使用依赖注入的一些经验和建议,并且将会讨论这些原则背后的动机是什么: (1)有效地设计服务及其依赖关系. (2)防止多线程问题. (3)防止内存泄漏. (4)防止潜在的错误. 在讨论该话题之前,了解什么是服务是生命周期至关重要,当组件通过依赖注入请求另一个组件时,它接收的实例是否对该组件实例是唯一

反射机制、依赖注入、控制反转

反射机制 正向: 代码->dll, 先编码, 定义好类,通过实例化对象来调用之. 反向: dll->类[方法,属性]. 从已经有的dll文件反编译得到其中的一些可用的方法. 审查元数据并收集关于它的类型信息的能力.元数据(编译以后的最基本数据单元)就是一大堆的表,当编译程序集或者模块时,编译器会创建一个类定义表,一个字段定义表,和一个方法定义表等. System.reflection命名空间包含的几个类,允许你反射(解析)这些元数据表的代码. 反射是.Net中获取 运行时类型信息的方式,.Ne