为什么3.0不支持构造器注入? #3483
zanminkian
started this conversation in
General / 闲聊
为什么3.0不支持构造器注入?
#3483
Replies: 2 comments 6 replies
-
因为 js 天然的异步特性,构造器无法实现异步初始化特性,如果保留构造器注入,那属性注入和构造器注入两者混合时,会造成非常混乱的局面。 |
Beta Was this translation helpful? Give feedback.
5 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
在Nest或Midway中使用字段注入方式是糟糕的
Nest使用依赖注入,支持两种注入方式:
前者有以下缺点:
es2021
及以前,不能大于等于es2022
,如果target设置为es2022
及之后,需要额外设置useDefineForClassFields: false
,又或者,使用declare方式声明字段。如果不这么做,会有比较严重的bug。具体原因是因为ES2022以后,js的class能够直接定义字段,而不是只能在contructor里面设置。从这个角度来说,字段注入方式在现代化js/ts有兼容性问题。strictPropertyInitialization
必须设置为false,否则就得使用非空断言。这些操作让ts判空成本变高,开发者不知道这个字段是否为空。同时使用断言绝对不是ts的最佳实践。所以,我的问题是,字段注入的方式在java的spring中都已经被告警不建议使用,为什么midway依然使用字段注入的方式?又是出于什么原因考量在3.0移除了构造器注入方式?
Beta Was this translation helpful? Give feedback.
All reactions