【问题标题】:Angular2 DI DebugAngular2 DI 调试
【发布时间】:2016-11-08 17:12:17
【问题描述】:

有没有办法在控制台中调试 Angular 2 依赖注入来检查服务创建的顺序?

例如:

正在创建“AuthService”实例...

正在创建“UserService”的实例...

我遇到了一些奇怪的错误,例如:

reflective_provider.js:240 Uncaught 无法解析所有参数 'ScaffoldStorage'(未定义,URLFileItemReader)。确保所有 参数用 Inject 修饰或具有有效的类型注释 并且 'ScaffoldStorage' 用 Injectable 装饰。

也许注入器正试图在 AuthService 之前创建 MyService(服务缺失),或者我可能有我不知道的相互依赖的服务..(我在应用程序中有 20 多个服务,在这里列出所有服务是不可行的:()

编辑:

1 - 我忘记了最简单的解决方案:在每个服务的构造函数中写“console.log”..

2 - 我刚刚更改了导入顺序,它起作用了.. 有人知道为什么吗?

# Before 
# ...
import { AUTH_PROVIDERS } from 'src/authentication';
import { SCAFFOLD_PROVIDERS } from 'src/scaffold';
# ...

# After
# ...
import { SCAFFOLD_PROVIDERS } from 'src/scaffold';
import { AUTH_PROVIDERS } from 'src/authentication';
# ...

# Boostraping: No change
bootstrap(AppComponent, [
  # ...
  AUTH_PROVIDERS,
  ROUTER_PROVIDERS,
  SCAFFOLD_PROVIDERS,
  # ...
  provide(PLATFORM_DIRECTIVES, {useValue: SHARED_DIRECTIVES, multi: true})
]).catch((error: Error) => console.error(error));

【问题讨论】:

  • ScaffoldStorage 是否用@Injectable 装饰?

标签: debugging dependency-injection angular


【解决方案1】:

很多时候,是因为你的服务的第一个构造函数参数的类型无法解析。

例如:

import {SomeType} from './something'; // wrong import
import {URLFileItemReader} from './reader'; // rightimport

@Injectable()
export class ScaffoldStorage {
  constructor(private service:SomeType, private reader:URLFileItemReader) {
    (...)
  }
}

【讨论】:

  • 当“./something”不存在时,你说?在我的情况下它存在..因为我只是改变了订单并且它起作用了
猜你喜欢
  • 2017-08-12
  • 1970-01-01
  • 1970-01-01
  • 2016-01-28
  • 1970-01-01
  • 2017-06-12
  • 2016-06-21
  • 2017-05-29
  • 1970-01-01
相关资源
最近更新 更多