Skip to content

Commit 83f0ef3

Browse files
committed
feat: 初始化未在constructor声明的服务
1 parent 25578a7 commit 83f0ef3

File tree

2 files changed

+14
-3
lines changed

2 files changed

+14
-3
lines changed

example/main.tsx

+8-1
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,16 @@ class HomeChild extends VueComponent<HomeChild_Props> {
6767
)
6868
}
6969
}
70+
class AService extends VueService {
71+
constructor() {
72+
super()
73+
console.log('aservice init')
74+
}
75+
}
76+
7077
// 组件
7178
@Autobind() // 绑定this 也可以放到这里
72-
@Component({ providers: [CountService] }) // 声明自己的服务
79+
@Component({ providers: [CountService, AService] }) // 声明自己的服务
7380
class Home extends VueComponent {
7481
// 构造函数注入服务,无需new
7582
constructor(private countService: CountService) {

src/di/index.ts

+6-2
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,8 @@ export function resolveComponent(target: { new (...args: []): any }) {
4949
if (options?.exclude?.length) {
5050
deps = deps.filter((k) => !options.exclude?.includes(k))
5151
}
52-
const injector = ReflectiveInjector.resolveAndCreate(deps, parent)
52+
const resolveProviders = ReflectiveInjector.resolve(deps)
53+
const injector = ReflectiveInjector.fromResolvedProviders(resolveProviders, parent)
5354
if (options?.globalStore) {
5455
// 如果作为全局的服务,则注入到根上面
5556
const current = getCurrentInstance()!
@@ -61,5 +62,8 @@ export function resolveComponent(target: { new (...args: []): any }) {
6162
} else {
6263
provide(InjectorKey, injector)
6364
}
64-
return injector.get(target)
65+
const compInstance = injector.get(target)
66+
// 处理一下providers中的未创建实例的服务
67+
if (options?.providers?.length) resolveProviders.forEach((k) => injector.get(k.key.token))
68+
return compInstance
6569
}

0 commit comments

Comments
 (0)