我试图理解Angular 7中的DI。DI用于实例化可注入的类的对象。
需要知道我们如何将其应用于apache poi
。
我知道我们可以像下面这样注入
org.apache.poi.ss.usermodel.DateUtil
但是我们怎么知道HttpClient
是可注射的?
问题看起来很愚蠢。由于我是Angular的新手,所以我试图了解其逻辑。
答案 0 :(得分:1)
基本上,因为导入HttpClientModule
时,它告诉Angular依赖项注入器他可以在需要时提供HttpClient
。
这是通过
完成的 1)将类HttpClient
装饰为@Injectable()
2)拥有一个模块HttpClientModule
,该模块可以导入{em>提供 HttpClient
。
3)当然,所有操作都由Angular依赖注入器完成,这是框架的基础。它正在研究各种模块及其providers
的配置参数。 (以及其他一些与Angular 6+相关的数据)
如果要创建自己的可注射服务,基本上应该执行相同的操作(1和2)。
以下文档和相关的Angular源代码片段:
https://angular.io/api/common/http/HttpClientModule
HttpClientModule
为HttpClient配置依赖项注入程序并提供支持 XSRF的服务。由HttpClientModule自动导入。
(第56行附近)
/**
* Perform HTTP requests.
*
* ....
*/
@Injectable() // <- this marks the class as Injectable (which basically makes it a Service in Angular framework)
export class HttpClient {
// ...
Source code for HttpClientModule
(大约143行)
@NgModule({
/**
(...)
* Configures the [dependency injector](guide/glossary#injector) where it is imported
* with supporting services for HTTP communications.
*/
providers: [
HttpClient, // <- here this is how the injector system is aware of HttpClient being injectable, if you import this module
(...)
]
})
export class HttpClientModule {
}
(我在上述摘要中用// <-
注释的我自己的评论)
也值得一读:
https://angular.io/guide/glossary#injector
https://angular.io/guide/dependency-injection
一个有趣的有趣博客,介绍了有关细节以及现代(Angular 6+)注入方式(具有摇树功能):
(Angular 2的)依赖项注入系统的机制中还有一个更重要的方面:https://blog.thoughtram.io/angular/2015/05/18/dependency-injection-in-angular-2.html#dependency-injection-in-angular
最后一个涉及更深层次的技术: https://blog.angularindepth.com/angular-dependency-injection-and-tree-shakeable-tokens-4588a8f70d5d