Mój konstruktor ma opcjonalne parametry i wydaje się, że bałagan z dominującym sposobem wykonywania DI.Konstruktor Angular 2 DI z opcjonalnymi parametrami
constructor(public name:string, public age?:number, private _service:Service);
Typescript zrozumiałych względów nie podoba, że mogę umieścić non opcjonalny parametr za opcjonalnym drugim, ponadto usługa nie zostanie wstrzyknięty gdy opcjonalny parametr nie jest ustawiony. Jak mam to rozwiązać? Nie mogę umieścić go gdzie indziej w konstruktorze, ponieważ byłbym oczekiwał ręcznego ustawienia usługi.
Czy jest coś w rodzaju wstrzyknięcia polowego?
@Inject() private _service:Service;
constructor(public name:string, public age?:number);
Czy należy zastąpić opcjonalne parametry wartościami domyślnymi? Jakieś inne sugestie?
dzięki
Edytuj Jak omówiono poniżej, starałem się wprowadzić usługę do obiektu, który nie został stworzony przez kątowej za DI. To nie działa. Ponieważ nie mogę utworzyć tej klasy (modelu) za pomocą DI, teraz przekazuję usługę ręcznie z klasy, która tworzy instancje tych obiektów.
I może być czegoś brakuje, ale " wiek "nie jest rzeczą, którą chcę wstrzyknąć. Tworzę nowy obiekt za pomocą konstruktora takiego jak 'new Person (" Mike ", 32);' i 'Service' powinien zostać wstrzyknięty niezależnie od ustawiania wieku, czy nie. Czy po prostu muszę opisać każdy opcjonalny (TS =?) Za pomocą @Opcja()? – KenavR
Nie jestem pewien, czy w pełni rozumiem Twoje pytanie. W przypadku 'nowej osoby (" Mike ", 32)' nie ma w ogóle żadnego iniekcji zależności. DI jest włączony tylko wtedy, gdy instancje są tworzone przez samą DI. Na przykład komponenty i zależności są tworzone przez DI. Czy możesz wyjaśnić? –
"DI jest zaangażowany tylko wtedy, gdy instancje są tworzone przez samą DI." Sądzę, że to mój "problem" lub coś, czego nie rozumiem. Tworzę obiekty ręcznie ustawiając nazwę i wiek przy użyciu konstruktora. Myślałem, że DI wprowadzi inne parametry z zarejestrowanym dostawcą. Zgadnij, że to nie działa. – KenavR