Angular 2 - Abhängigkeitsinjektion und Barreling

Ich hatte ein Problem mit der Abhängigkeitsinjektion beim Importieren eines Dienstes aus einem Fass https: //angular.io/docs/ts/latest/glossary.html#! # barrel).

Das Problem, mit dem ich konfrontiert bin, ist das:

Nach den Angular-Richtlinien gibt es in der App ein Core-Barrel und dann ein Barrel für jeden Ordner. Dies wird erreicht, indem in jedem Ordner eine index.ts angegeben wird. Der Kern index.ts verweist auf alles aus jedem Ordner, und jeder Ordner verweist wiederum auf die spezifischen Dateien.

core index.ts

...
export * from './test/index';

test index.ts

...
export * from './my-service.service';

Cod

import { MyService } from '../../core';
...

@Injectable()
export class AuthGuard implements CanActivate {
    isValidSession: boolean = false;
    errorMessage: any;

    constructor(
        private myService: MyService
    ) { }

    canActivate(
        // Not using but worth knowing about
        next: ActivatedRouteSnapshot,
        state: RouterStateSnapshot
    ) {
        return this.myService.doSomething();
    }
}

Der obige Code führte zu folgendem Fehler:

Uncaught Cannot resolve all parameters for 'AuthGuard'(undefined). Make sure that all the parameters are decorated with Inject or have valid type annotations and that 'AuthGuard' is decorated with Injectable.

Beim Betrachten des Codes habe ich kein Problem mit fehlenden @ gefunde@Injectable Anmerkungen. Tatsächlich wurde derselbe Dienst in anderen Komponenten verwendet und mit dem Kernindex.ts importiert.

EinArtike Ich fand vorgeschlagen, dass@Inject im Konstruktor sollte verwendet werden, da manchmal, wenn TypeScript in JavaScript konvertiert wird, die Metadaten nicht erstellt werden. Dies hat das Problem in meinem Fall nicht gelöst. Nachdem ich einige Dinge ausprobiert hatte, habe ich einfach versucht, den Import zu ändern, um den folgenden Service zu erhalten, und der Fehler wurde nicht ausgelöst.

Erfolgreicher Import:

import { MyService } from '../../core/test/my-service.service';

ode

import { MyService } from '../../core/test';

Ich bin mir nicht sicher, ob es ein Problem mit den index.ts-Dateien in meiner Anwendung gibt oder ob die Dateistruktur selbst falsch ist, aber soweit ich weiß, funktionieren sie einwandfrei. Möchten Sie wissen, warum diese besondereimport macht einen Unterschied.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage