Angular : IOC的方式:依赖注入

依赖注入 @Component, @Injectable 可以允许别的声明在providers里面的Service等注入到被这两个装饰器装饰的类中

Service等可以被声明在app-module.ts文件的providers中,这样他对全局就是可见的.任何一个组件都可以注入他.

Service也可以被声明在组件的类中 providers: [{ provide: ProductService, useClass: AnotherProductService }]
前面是注入类的类型,后面是实际使用那一个类注入,因为这儿AnotherProductService 实现了ProductService类
这样的话这个Service只能被这个组件或者这个组件的子组件注入.

除了可以使用useClass来声明注入的类之外,还可以使用useFactory来直接创建一个工厂方法,如下图,ProductService用的就是一个工厂方法,里面需要两个参数,一个LoggerService 一个appConfig 这两个依赖都可以通过另一个属性 deps来提供,deps里面声明了这个工厂方法所需要的依赖.其中APP_CONFIG是一个值声明,这个提供器用useValue提供了一个对象.

无论是通过<router-outlet></router-outlet> 还是直接用<组件名></组件名>的方式在组件中嵌套组件,嵌套的组件都是当前组件的子组件

注入器的层级是从下往上的,在组件中如果需要依赖,那么会首先找当前组件的注入器中注册的提供器,如果没有,那么会一层一层的往上找,一直找到应用级注入器.如果没有找到符合条件的提供器,则抛出异常

angular的依赖注入只有一个注入点,就是构造函数constructor

下面是手动调用注入器的方式注入服务的例子:

猜你喜欢

转载自www.cnblogs.com/cccy0/p/9394014.html