2016-05-23 12 views
15

Załóżmy mam ten kątowa 2 Usługa:kątowa 2 karnetów Parametr do Służby Constructor

@Injectable() 
class Demo { 
    constructor(private instanceSpecificString: string) { 
    } 
} 

Zauważ, że jego konstruktor przyjmuje ciąg specyficzne dla instancji. Mam na myśli to, że chcę utworzyć tę usługę wiele razy i za każdym razem, gdy zostanie ona utworzona, chcę przekazać jej inny ciąg w oparciu o kontekst, w którym tworzona jest usługa.

Jak to zrobić?

P.S. Przykładem jest string, ale parametr ten może być z łatwością typu number lub boolean lub nawet pewnego rodzaju konfiguracji object.

Odpowiedz

2

Wartość, która zostanie przekazana do usługi, zostanie określona przez wtryskiwacz, który ją tworzy. Ci może być w stanie to zrobić w jednej z definicji składowych:

@Component({ 
    ... 
    providers: [ 
     provide(string, {useValue: "someSpecificValue"}) 
    ] 
}) 

to jednak ma problem, że jesteś określającą dostawcy dla łańcucha tokena i które mogłyby doprowadzić do problemów łatwość konserwacji.

Prawdopodobnie byłoby lepiej, aby zdefiniować jakiś wzór modelu konfiguracyjny dla usługi:

class DemoConfig { 
    instanceSpecificString: string; 
} 

I wtedy można utworzyć instancję, że aby przejść do serwisu.

let config = { instanceSpecificString: "someSpecificValue" } 

@Component({ 
    ... 
    providers: [ 
     provide(DemoConfig, {useExisting: config}) 
    ] 
}) 

Mam nadzieję, że to będzie pomocne. Nie próbowałem tego sam; usługi, których używam w mojej aplikacji, to single. Oto odniesienia, który używałem:

https://angular.io/docs/ts/latest/api/core/index/provide-function.html

+0

Co jeśli moja usługa jest zależność przechodnia składnika? Czy nadal mogę używać 'provide'? – battmanz

+0

Angular2 używa hierarchicznego systemu wtryskowego, co oznacza, że ​​gdy wtryskiwacz tworzy wystąpienie usługi, sprawdza najbliższy dostawca pod względem tokena wymaganego przez usługę. Jeśli nie znajdzie definicji w iniektorach, na które patrzy, sprawdzi wtryskiwacz macierzysty, aż do wtryskiwacza głównego. https://angular.io/docs/ts/latest/guide/hierarchical-dependency-injection.html – awiseman

+0

Skąd pochodzi funkcja "zapewnić()"? – OddDev

Powiązane problemy