Angular 模式来支持通过DI进行定制
我正在研究的实现有以下代码:Angular 模式来支持通过DI进行定制,angular,angular2-di,Angular,Angular2 Di,我正在研究的实现有以下代码: @Injectable() export class InMemoryBackendService { protected config: InMemoryBackendConfigArgs = new InMemoryBackendConfig(); ^^^^^^ ... constructor( @Inject(InMemoryBackendConfig) @Optional() config: In
@Injectable()
export class InMemoryBackendService {
protected config: InMemoryBackendConfigArgs = new InMemoryBackendConfig();
^^^^^^
...
constructor(
@Inject(InMemoryBackendConfig) @Optional() config: InMemoryBackendConfigArgs
^^^^^^
) {
...
据我所知,模式如下:
HTTP
模块中的RequestOptions
可能也有类似的情况
这是一种常见的模式吗
编辑:
事实证明,内存web api
并不是我要问的模式。假设我有一个类a
,它使用类B
的实例,该实例可以用标记B
注入。因此,它们都在根注入器中注册:
提供者:[A,B]
现在,如果用户想要自定义B
,他可以在同一令牌下注册自定义版本,从而有效地超越原始B
:
providers: [{provide:B, useClass: extendedB}]`
这就是在
http
模块中扩展RequestOptions
的方法。默认值不仅仅被覆盖。这里是
没有它什么都不会发生
此模式不是DI特有的,它是默认属性值的常用配方,类似于\uU8.defaults
我想说,InMemoryBackendConfig中的在这里是无用的抽象。由于this.config
总是与config
合并,因此前者可能只是一个普通对象
protected config: InMemoryBackendConfigArgs = { ... };
InMemoryBackendConfig
和RequestOptions
使用此模式的复杂变体。是的,最基本的形式是这样做的:
providers: [{provide:B, useClass: extendedB}]`
AngularJS中的constant
服务广泛使用此模式来配置对象,但是将B
作为类而不是普通对象,可以扩展原始值而不是替换它们。默认值不仅仅被覆盖。这里是
没有它什么都不会发生
此模式不是DI特有的,它是默认属性值的常用配方,类似于\uU8.defaults
我想说,InMemoryBackendConfig中的在这里是无用的抽象。由于this.config
总是与config
合并,因此前者可能只是一个普通对象
protected config: InMemoryBackendConfigArgs = { ... };
InMemoryBackendConfig
和RequestOptions
使用此模式的复杂变体。是的,最基本的形式是这样做的:
providers: [{provide:B, useClass: extendedB}]`
AngularJS中的constant
服务广泛使用此模式来配置对象,但是将B
作为类而不是普通对象,可以扩展原始值而不是替换它们。是的,谢谢,我错过了构造函数中的config
不提供访问修饰符。所以这是不同的模式。http
模块的RequestOptions
示例更切题。让我来编辑这个问题。顺便问一下,你的linkedin帐户是什么?实际上,我认为RequestOptions是一个更复杂的版本,非常独特。它不是assign
,而是与进行更复杂的合并。这是一个可用的,但通过使用..我已经更新了答案。是的,你建议的模式应该是这样的。我个人会坚持使用配置对象的可注入类。角度内置不是最好的例子,因为它们也直接用new
实例化,这并没有使事情变得更简单。是的,谢谢,我错过了它们没有在构造函数中为config
提供访问修饰符。所以这是不同的模式。http
模块的RequestOptions
示例更切题。让我来编辑这个问题。顺便问一下,你的linkedin帐户是什么?实际上,我认为RequestOptions是一个更复杂的版本,非常独特。它不是assign
,而是与进行更复杂的合并。这是一个可用的,但通过使用..我已经更新了答案。是的,你建议的模式应该是这样的。我个人会坚持使用配置对象的可注入类。角度内置不是最好的例子,因为它们也直接用new
实例化,这并没有使事情变得更简单。