2014-09-04 21 views
27

W znajduje się wyjaśnienie różnic między fabryką, usługą, wartością, stałą i dostawcą.Co to jest wtrysk przyjazny?

At the end mamy tabelę porównania: Comparison table Jeden z wierszy jest „przyjazny typ wtrysku”. Nie mogłem zrozumieć, co to jest.

Co to znaczy? Dodatkowo, co to znaczy, że w celu uzyskania wartości "iniekcji przyjaznej typowi" kosztem jest "szybka inicjalizacja za pomocą nowego operatora bezpośrednio"?

Odpowiedz

11

W angularjs można wstrzyknąć współzależności na wiele sposobów:

  • w dyrektywie link funkcji przez położeniu
  • w definicji dyrektywy wg nazwy
  • w funkcji regulatora wg nazwy
  • w fabryka działa pod nazwą
  • w funkcji serwisowej według typu

Rodzaj przyjazny wtrysku pozwala implicity wywołać funkcję konstruktora przez odniesienie:

myApp.service('Pattern', ["Infinity", RegExp]); 

raczej niż przez jawnie przy użyciu new kluczowe:

myApp.factory('Pattern', 
["Infinity", function(Infinity) 
    { 
    return new RegExp(Infinity); 
    } 
]); 

LUB

function goInfinity(Infinity) 
    { 
    return new RegExp(Infinity); 
    } 

goInfinity.$inject = ["Infinity"]; 
myApp.factory('Pattern', goInfinity); 

Przepis usługi tworzy usługę podobnie jak V alue lub Factory recipes, ale robi to poprzez wywołanie konstruktora z nowym operatorem. Konstruktor może przyjmować zero lub więcej argumentów, które reprezentują zależności wymagane przez instancję tego typu.

Marzą inicjalizacji oznacza, że ​​constant przepis należy zwrócić konstruktora w celu wykorzystania wspomnianego składnię:

function RegExpConstant() 
    { 
    return new RegExp(Infinity); 
    } 

myApp.constant('Pattern', RegExpConstant) 

zamiast powrotu funkcję, obiekt lub wartości dosłownego.

Nomenklatura pochodzi z Java:

Usługa jest dobrze znany zestaw interfejsów. Usługodawca jest specyficzną implementacją usługi. Fabryka jest obiektem, który zwraca się odniesienia do obiektu z innym obiektem

Odniesienia

+0

@paulsweatte 'kątowe to wiosna, reakcja nie jest" –

5

Typ tutaj odnosi się do:

  • prymitywów,
  • obiektu literałów,
  • funkcji lub
  • nawet wystąpienie typu niestandardowego

Fabryki a dostawcy są najbardziej elastyczni Usługa, stała, wartość pod względem tego, co wiążą się z wtryskiwaczem. W związku z tym Angular może wykryć typ obiektu/prymitywu, który jest związany z usługą, stałą, wartością, a więc bardziej przyjazny, ponieważ znamy typ z góry (czas projektowania/kompilacji).

9

Moja interpretacja „przyjaznej wtrysku typu”:

Fabryki i dostawcy wstrzyknąć cokolwiek jest zwracany przez funkcję fabryki i $ dostać funkcję odpowiednio, które mogą być dowolnego typu i może potencjalnie zmieniają się dynamicznie w czasie wykonywania. O ile zastrzyki usługowe, stałe i o wartości są stałe, o których Angular jest świadomy, ponieważ są dobrze zdefiniowane podczas definiowania receptury. Dlatego są to iniekcje przyjazne typowi.

2

Po prostu zadałem sobie to samo pytanie, patrząc na ten sam stół. :-)

Moja najlepsza interpretacja przypuszczenie wartości w tym wierszu tabeli jest to, że w rzeczywistości oznacza „czy można dowiedzieć się, co stworzył wystąpienie usługi od instancji usługi samego”, czyli 'czy instancja Serwisu Właściwość constructor jest ustawiona na znaczącą funkcję '.

Oto bardziej szczegółowy interpretacja dla każdego Przepisy:

  • fabrycznych: nie, ale może być tak jeśli skonstruować wartość zwracaną przez wywołanie operatora new
  • service: yes - odwoła się do funkcji receptury usługi
  • wartość/stała: tak, ale tylko jeśli budować wartość poprzez wywołanie operatorowi new
  • dostawcy: nie, ale może być tak jeśli skonstruować wartość zwracana przez provider.$get metody badaniem przez wewnętrzne zadzwonienie do operatora new

W obecnej formie ta część dokumentacji wydaje się być niedokończona i możliwe jest, że autor Kilka pomysłów na to, co chciał tu pokazać, ale ostateczna dokumentacja zdołała wymknąć się przez pęknięcia, które zostały opublikowane w pewnym pośrednim stanie.

+0

To był najbardziej prawdopodobnym wyjaśnieniem mogę myśleć o zbyt. To bardzo nienaturalny sposób opisania tej koncepcji w JS, ale potem zdałem sobie sprawę, że musi to być częścią procesu torowania drogi dla ng2/TypeScript, który byłby związany z tym, by było to zapewnienie, które w szczególności było statycznie analizowalne. Dlatego fabryka i dostawca nie są "tak", nawet "tak"; oczywiście, możesz użyć konstruktora wewnątrz, ale nie jestem pewien, czy analiza statyczna byłaby w stanie ostatecznie potwierdzić typ. – Semicolon

+0

(Myślę, że bardzo by pomogło, gdyby nazwano wiersz "jest przyjazny dla rodzaju, gdy jest wstrzyknięty gdzie indziej" lub coś zamiast "wykorzystuje wstrzyknięcie przyjazne dla typu", ponieważ ten drugi powoduje, że myślisz, że odnoszą się one do zastrzyku przepis - dlatego początkowo byłem zaskoczony tym, że "stała" i "wartość" zaczynają być oznaczone "tak *".) – Semicolon