dans les services angulaires 1.x ont été injectés en spécifiant son nom enregistré. Par exemple en utilisant tapuscrit:trop de colle dans angular2 DI ou y a-t-il un autre moyen?
// 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']
}
attention à ce que la mise en œuvre du contrôleur n'a pas de référence de quelque manière que le fichier ni la classe qui implémente le service
mais dans 2 angulaire, pour accomplir une DI similaire vous avez quelque chose comme dans ces lignes:
import {Component} from 'angular2/core';
import {AppointmentServices} from 'appointment-services';
@Component({
...
providers: [AppointmentServices]
})
export class Appointment {
constructor (service: AppointmentServices) {
...
}
}
attention de salaire que dans la deuxième importation ci-dessus, je dois préciser l'endroit où les AppointmentServices est mis en œuvre ainsi que le nom de la classe qui représente un lien entre le composant et l'implémentation du service
Existe-t-il un moyen dans angular2 d'injecter le service sans spécifier la classe et le fichier qui l'implémente?
Je pense que cette approche angulaire2 est un peu un pas en arrière en termes d'IoC accompli dans son prédécesseur si DI doit être fait de telle manière!
Bonne réponse :) Cela permet également de distinguer deux services avec le même nom (de bibliothèques différentes) pour éviter les collisions inattendues. Cela permet également de bien agiter les arbres car il peut être suivi d'où proviennent les identifiants. Les bibliothèques qui ne sont pas importées sont connues pour être inutilisées et peuvent être ignorées. La façon Angular1 est la manière typique de JS où vous devez espérer que vous n'oublierez pas de nommer quelque chose de manière cohérente. Dans TypeScript, les outils peuvent fournir beaucoup de conseils, mais ils ont besoin d'informations explicites. –
Je pense toujours que c'est trop de colle et un pas en arrière en termes d'IoC. Jetez un oeil à http://inversify.io/ qui est ce que je cherchais vraiment. C'est une véritable approche de l'IoC car la dépendance entre un composant et un service en angular2 n'est pas pratique –