【问题标题】:Is there any reason(except unit-tests) to use Angular2 Dependancy Injection?是否有任何理由(单元测试除外)使用 Angular 2 依赖注入?
【发布时间】:2016-10-30 17:58:34
【问题描述】:

我试图弄清楚为什么我们需要 Angular2 依赖注入。 测试案例很清楚:我们可以轻松地模拟任何服务。 但是您能提供任何其他原因吗?

【问题讨论】:

    标签: angular angular2-injection


    【解决方案1】:

    使用 DI 会带来更好的架构,其中类的耦合更松散。这也是此类代码具有更好可测试性的原因。

    DI 不仅可以轻松模拟服务,还可以轻松配置生产场景。

    您可以通过仅更改一个文件但影响整个应用程序来提供不同的配置值或服务实现。

    因此,使测试更容易的主要优势在测试之外也有优势。

    abstract class ConfigBase {
      get someConfigValue():number;
    }
    
    @Injectable()
    class MyConfig1 extends ConfigBase {
      get someConfigValue():number {
        return 1;
      }
    }
    
    @Injectable()
    class MyConfig2 extends ConfigBase {
      get someConfigValue():number {
        return 2;
      }
    }
    
    let config = new MyConfig1();
    let serverUrl = 'http://example.com';
    
    @NgModule({
      providers: [
        {provide: 'serverUrl', useValue: 'http://},
        {provide: ConfigBase, useValue: config}
      ],
      ...
    })
    
    @Injectable() 
    class MyService {
      constructor(
          private http:Http,
          @Inject('serverUrl') private serverUrl:string,
          private config:ConfigBase
      ) {}
    
      doSomething() {
        console.log(this.config.someConfigValue);
        this.http.get(this.serverUrl).subscribe(...);
      }
    }
    

    【讨论】:

    • 能否请您提供一个通过 DI 进行不同配置的示例?
    • 我更新了我的答案。您可以通过修改以let 开头的行来更改配置。 (这些类可以在不同的文件中)
    猜你喜欢
    • 2017-11-19
    • 1970-01-01
    • 2020-09-09
    • 2021-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多