是否有任何理由(单元测试除外)使用Angular2 Dependancy Injection?

时间:2016-10-30 17:58:34

标签: angular angular2-injection

我试图找出为什么我们需要Angular2 Dependancy Injection。 测试案例很明确:我们可以轻松模拟任何服务。 但是你能提供任何其他理由吗?

1 个答案:

答案 0 :(得分: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(...);
  }
}