Usługa Angular 6 z frontendem
Tworzę aplikację w Angular (
6.0.7) i próbuję utworzyć usługę za pomocą nowej:
@Injectable({
providedIn: 'root'
})
Ale jak mogę wstrzyknąć za pomocą interfejsu?
Problem
Mam 2 usługi,
Authentication.service
i
SessionStorage.service
... Chcę wstrzyknąć pamięć sesji do usługi uwierzytelniania. Można to zrobić za pomocą:
constructor(private sessionStorage: SessionStorage) {
}
Nie ma problemu. Ale dla celów obiektowych chcę mieć
interfejsnad tą usługą (aby móc zaimplementować zarówno usługę localstorage, jak i usługę sessionstorage). Więc ma sens, że chcę wprowadzić wstrzykniętą klasę z interfejsem, ale nie można tego zrobić w taki sam sposób, jak
Kątowy 5 i niższy
https://coderoad.ru/40068456/
.
Jak więc mogę wstrzyknąć tę globalną usługę za pomocą mojego interfejsu?
próbowałem
Typy usług kątowych opisują
InjectableProvider, ale to nie pasuje do żadnego z rodzeństwa
InjectableProvider, więc powoduje błąd kompilatora (i tslint).
@Injectable({
providedIn: 'root'
}, {provide: IStorageService, useClass: SessionStorage})
Nie znaleziono powiązanych wyników
Zaproszony:
Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się
4 odpowiedzi
Anonimowy użytkownik
Potwierdzenie od:
Anonimowy użytkownik
Potwierdzenie od:
app.module.ts
AlmostInterface.ts
MyConcrete.ts
environment.ts
environment.prod.ts
Anonimowy użytkownik
Potwierdzenie od:
interfejsy maszynopisu nie istnieją
w czasie wykonywania (tylko bezpieczeństwo typu w czasie kompilacji).
Sugerowałbym użycie do tego
Klasa abstrakcyjna
.
EDIT:
Wygląda na to, że możesz użyć w
pierwszy
parametr @Injectable, a nie w drugim, jak w przykładzie. Połączenie tego z odpowiedzią @ k0zakinio daje:
Wygląda również na to, że musisz zadeklarować swoje zależności przez lub , sprawdź to
problem
https://github.com/angular/angular/issues/23592
github. Mam nadzieję, że tym razem moja odpowiedź pomoże bardziej.
Anonimowy użytkownik
Potwierdzenie od:
[{ provide: InterfaceName, useClass: ClassName}]