当我在runInContext
中调用@inject()
时,以下代码将触发NullInjectorError
。如果服务是providedIn: 'root'
或在模块providers
中传递,则不会发生这种情况。
知道为什么吗?
@Injectable()
class Service {}
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css'],
providers: [Service],
})
export class AppComponent {
name = 'Angular ' + VERSION.major;
public constructor(service: Service, injector: EnvironmentInjector) {
console.log(service); // OK
console.log(inject(Service)); //OK
setTimeout(() => {
injector.runInContext(() => {
console.log(inject(Service)); //KO
});
}, 1000);
}
}
Stacklitz
根据Angular#47566,这是目前的设计,但可以改进。
所以等待&看见