Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 模式来支持通过DI进行定制_Angular_Angular2 Di - Fatal编程技术网

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 
                                                   ^^^^^^
        ) {
        ...
据我所知,模式如下:

  • 定义类属性并实例化依赖项而不使用DI
  • 可选地注入依赖项
  • 如果用户通过DI提供修改后的依赖项,则将注入该依赖项,并覆盖未使用DI实例化的默认依赖项。我怀疑
    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
    实例化,这并没有使事情变得更简单。