在Angular中,inject()
函数返回的是一个新的实例。下面是一个包含代码示例的解决方法:
import { Component, Injectable, Inject, InjectionToken } from '@angular/core';
// 创建一个自定义的依赖注入令牌
const MY_TOKEN = new InjectionToken('myToken');
// 创建一个可注入的服务
@Injectable()
class MyService {
value: string = 'Hello';
constructor() {
console.log('Service instance created');
}
}
// 创建一个组件,并注入服务
@Component({
selector: 'my-component',
template: `
{{ value }}
`,
providers: [
{ provide: MY_TOKEN, useClass: MyService }
]
})
class MyComponent {
constructor(@Inject(MY_TOKEN) private service: MyService) {}
get value() {
return this.service.value;
}
}
在上面的代码中,MyService
是一个可注入的服务。MyComponent
组件通过使用@Inject(MY_TOKEN)
装饰器来注入MyService
服务实例。每次注入MY_TOKEN
时,都会创建一个新的MyService
实例。
请注意,如果在应用程序的不同部分注入了相同的MY_TOKEN
,那么每个部分都会创建一个新的MyService
实例。如果您希望在整个应用程序中共享同一个实例,可以在根模块中提供MyService
,而不是使用MY_TOKEN
进行注入。