1

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

4

1 回答 1

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(...);
  }
}
于 2016-10-30T18:11:10.687 回答