web-dev-qa-db-fra.com

Avertissement: Impossible de résoudre tous les paramètres pour UsersPermissionsService Cela deviendra une erreur dans Angular v5.x

Lorsque je lance ng build -prod, je reçois l'avertissement suivant.

Warning: Can't resolve all parameters for UsersPermissionsService in C:/SourceControl/Test.Client/src/app/shared/users/users-permissions.service.ts: (?, ?, ?). This will become an error in Angular v5.x
Warning: Can't resolve all parameters for UsersPermissionsService in C:/SourceControl/Test.Client/src/app/shared/users/users-permissions.service.ts: (?, ?, ?). This will become an error in Angular v5.x

Mon code est le suivant:

import { Injectable } from '@angular/core';

@Injectable()
export class UsersPermissionsService {

    public USERS_CREATE_PERMISSION: string = '';
    public USERS_UPDATE_PERMISSION: string = '';
    public USERS_DELETE_PERMISSION: string = '';

    constructor(public UsersCreatePermission: string,
        public UsersUpdatePermission: string,
        public UsersDeletePermission: string) {
        this.USERS_CREATE_PERMISSION = UsersCreatePermission;
        this.USERS_UPDATE_PERMISSION = UsersUpdatePermission;
        this.USERS_DELETE_PERMISSION = UsersDeletePermission;
    }
}


@Injectable()
export class UserModulePermissionsService extends UserPermissionsService {
    constructor() {
        super("ClientsCreate",
            "ClientsEdit",
            "ClientsDelete");
    }
}

@Component({
    templateUrl: './users-permissions.component.html',    
    providers: [UsersPermissionsService]
})
export class UsersPermissionsComponent {
    constructor(public usersPermissionsService: UsersPermissionsService) {

    }
}

et dans mon module chargé paresseux j'ai:

 providers: [
        { provide: UsersPermissionsService, useClass: UserModulePermissionsService }
    ]

Maintenant que l’angle 5 est sorti, je devrai mettre à jour et comme le message le dit, cet avertissement deviendra une erreur.

Ne comprends pas quel est vraiment le problème ici.

10
pantonis

Supprimez le décorateur @Injectable de la classe de base. Vous devez uniquement inclure ce décorateur (ou tout décorateur d'ailleurs) sur les classes que Angular doit instancier directement (et ce faisant, résoudre également leurs paramètres de constructeur à l'aide de l'injecteur).

Comme il est évident que dans votre cas, la classe de base ne doit pas être instanciée directement par un angle (elle a des paramètres de constructeur inconnus de l'injecteur), vous devez en retirer les décorateurs.

22
Aviad P.

Je l'ai eu parce que j'ai essayé d'ajouter un paramètre au parent d'un service

A
   constructor(logger: loggerService, someData: myData)

B extends A
    constructor (logger: loggerService, new myData())

La solution pour moi était de trouver un autre moyen de définir des données ...

0
Pipo