通過指定其註冊名稱來注入角色1.x服務。例如使用打字稿:angular2 DI膠過多還是有其他方法?
// appointments.ts
export interface IAppointmentServices {
retrieve(start: Date, end: Date): Appointment[]
}
// appointment-services.ts:
class AppointmentServices implements IAppointmentServices {
retrieve(start: Date, end: Date): Appointment[] {
...
}
}
angular.module('appointments')
.service('AppointmentServices', AppointmentServices);
// appointment-controller.ts
class AppointmentController {
constructor (private service: IAppointmentService) {
}
// pay attention that 'AppointmentServices' is the registered name
// not a hard reference to the class AppointmentServices
static $inject = ['AppointmentServices']
}
講究控制器實現了以任何方式文件,也沒有實現服務
但在角2類的參考,以實現類似DI你要的東西在這幾行:
import {Component} from 'angular2/core';
import {AppointmentServices} from 'appointment-services';
@Component({
...
providers: [AppointmentServices]
})
export class Appointment {
constructor (service: AppointmentServices) {
...
}
}
注意,在上面的第二個進口,我必須以指定AppointmentServices實施以及名稱的位置代表一個組件和服務之間的粘合
有沒有在angular2注入服務沒有指定類和實現它的文件的方式嗎?
我覺得這angular2方法是怎樣的一個步驟回在其前任完成的IoC而言,如果DI在這樣做!
好的答案:)這也允許區分具有相同名稱的兩個服務(來自不同的庫)以避免意外的衝突。它也允許適當的抖動,因爲它可以在標識符來自哪裏進行跟蹤。未導入的庫已知是未使用的,可以跳過。 Angular1的方式是典型的JS方式,你需要希望你不要忘記命名一致。在TypeScript中,工具可以提供很多指導,但他們需要明確的信息。 –
我仍然認爲這是太多膠水,在IoC方面倒退了一步。看看http://inversify.io/這是我真正想要的。這是一個真正的IoC方法,因爲angular2中組件和服務之間的嚴重依賴性並不方便 –