是否有任何理由(单元测试除外)使用 Angular 2 依赖注入?

Is there any reason(except unit-tests) to use Angular2 Dependancy Injection?

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

使用 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(...);
  }
}