我现在使用 Angular2/4 几个月了,但我仍然无法弄清楚这两种方法之间有什么区别,以及关于依赖注入(inject)我应该使用哪一种
你能帮我吗。
第一种方法:通过构造函数
...
constructor(
private myService: MyService
) {
// this.myService.myMethod() ...
}
...
和
第二种方法:通过注入(inject)器
...
private myService: MyService;
constructor(
injector: Injector
) {
this.myService = injector.get(MyService);
// this.myService.myMethod() ...
}
...
我了解每种方法的作用,但我无法找出最佳实践。
我知道这可能是一种主观意见,但我认为两者各有利弊。
感谢您的任何解释。
最佳答案
您应该始终更喜欢第一个选项:
...
constructor(
private myService: MyService
) {
// this.myService.myMethod() ...
}
...
第二种方法有效,因为当您注入(inject)
MyService
它是使用 Injector
注入(inject)的.Angular 使
Injector
可用于注入(inject),因为您可能需要在动态实例化模块或组件时使用它:零件:
export class ModuleLoaderComponent {
constructor(private _injector: Injector,private loader: NgModuleFactoryLoader) { ... }
ngAfterViewInit() {
this.loader.load('app/t.module#TModule').then((factory) => {
const module = factory.create(this._injector); <-----------------
模块:
export class RouterConfigLoader {
load(parentInjector, route) {
...
const modFactory = this.loadModuleFactory(route.loadChildren);
const module = modFactory.create(parentInjector);
}
您可以在以下文章中阅读有关动态实例化的更多信息:
正如@estus 所说,
injector
也用于在构造函数中注入(inject)依赖项导致循环依赖项或您希望根据某些条件获得依赖项的情况。
关于angular - 通过构造函数参数与 Injector 服务进行注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46558847/