Angular学习笔记-依赖注入入门

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_41012753/article/details/85129007

依赖注入

依赖注入:Dependency Injection 简称DI
首先,当使用参数是对象的方法时,需要先实例化对象,再传给方法。

var person = new Person();
addPerson(person);

于是我们说,addPerson方法依赖Person类,而Person类注入给addPerson方法。
我可真是个灵魂画手!
然而,当addPerson需要多个参数时,则有

//实例化对象start
var person = new Person();
var sex = new Sex();
var adress = new Adress();
var order = new Order();
order.setAdress(adress);
//实例化对象end
addPerson(person,sex,order);

DI解决了实例化对象这个冗长的步骤,在依赖注入中,

控制反转

控制反转:Inversion of Control 简称IOC
控制反转是指将依赖的控制权从代码内部移交到代码外部,实现控制反转模式的框架叫做IOC容器,Angular是IOC容器的。

依赖注入和控制反转的关系:
依赖注入和控制反转是一体两面的概念,控制反转是目的,而依赖注入是手段,Angular就是使用了“依赖注入”手段,实现了控制反转的目的。

var person = new Person();
addPerson(Person);
//如果把addPerson方法中的参数Person改成MockPerson,则需要改变内部代码new的过程
var product = new MockPerson();
addPerson(product );

而,依赖注入只需声明,我需要一个person参数,至于这个参数是来源于Person类还是MockPerson类,与我无关,只需交付给外部代码操作。

使用依赖注入步骤

松耦性,可重用性和可测试性高

@NgModule({
    providers:[ProductService]
    //等价于
    //providers:[{provide:ProductService,useClass:ProductService}]
})
export class AppModule { }

@Component({
    ...省略组件配置
})
export class ProductComponent{
    product:Product;
    constructor(productService:ProductService){
        this.product = productService.getProduct();
    }
}

而当需要更改服务为AnotherProductService时,只需更改providers中的声明,消除了ProductComponent和ProductService的耦合性。

@NgModule({
    providers:[{provide:ProductService,useClass:AnotherProductService}]
})
export class AppModule { }

猜你喜欢

转载自blog.csdn.net/weixin_41012753/article/details/85129007