【发布时间】:2017-02-20 14:57:00
【问题描述】:
我在看in-memory-web-api的实现,有如下代码:
@Injectable()
export class InMemoryBackendService {
protected config: InMemoryBackendConfigArgs = new InMemoryBackendConfig();
^^^^^^
...
constructor(
@Inject(InMemoryBackendConfig) @Optional() config: InMemoryBackendConfigArgs
^^^^^^
) {
...
据我了解,模式如下:
- 定义类属性并在不使用 DI 的情况下实例化依赖项
- 可选择注入依赖项
如果用户通过 DI 提供修改后的依赖项,它将被注入,并且默认的没有 DI 的实例化的依赖项将被覆盖。我怀疑HTTP 模块中的RequestOptions 可能有类似的东西。
这是一种常见的模式吗?
编辑:
事实证明,in-memory-web-api 并不是我要询问的模式。假设,我有一个类A,它使用类B 的实例,可通过令牌B 注入。所以他们都注册了根注入器:
提供者:[A, B]
现在,如果用户想要自定义B,他可以在同一个令牌下注册自定义版本,从而有效地覆盖原来的B:
providers: [{provide:B, useClass: extendedB}]`
这就是RequestOptions 可以在http 模块中扩展的方式。
【问题讨论】:
标签: angular angular2-di