Thực tế, các bộ phun chỉ có thể được cấu hình mức thành phần hoặc khi khởi động ứng dụng.
Khi bạn đặt nhà cung cấp cấp thành phần, mọi lớp học liên quan đến quá trình xử lý sẽ có quyền truy cập vào các nhà cung cấp này: các thành phần phụ, dịch vụ. Nhưng bạn không thể tự định cấu hình nhà cung cấp dịch vụ.
Nếu bạn định cấu hình nhà cung cấp ở cấp khởi động (khi gọi hàm bootstrap
), tất cả các yếu tố trong ứng dụng sẽ có thể sử dụng các nhà cung cấp này.
Trong thực tế, bộ phận phụ thuộc của Angular2 sử dụng kim phun phân cấp. Điều này có nghĩa là nhà cung cấp không được tìm thấy ở một cấp độ, nó sẽ được tìm kiếm ở cấp độ trên và như vậy.
Dưới đây là một tổng quan về tất cả những yếu tố này và mối quan hệ đó:
Application
(providers defined in bootstrap)
|
AppComponent
(providers defined in the providers attribute)
|
ChildComponent
(providers defined in the providers attribute)
getData() --- Service1 --- Service2
Để có thể sử dụng Service2
trong Service1
, nhà cung cấp tương ứng phải được tìm thấy trong cây nhà cung cấp.
Trong ứng dụng như vậy, chúng tôi có ba kim phun:
- Các vòi phun ứng dụng có thể được cấu hình bằng cách sử dụng tham số thứ hai của
bootstrap
chức năng
- Các
AppComponent
phun có thể được cấu hình bằng cách sử dụng providers
thuộc tính này thành phần. Nó có thể "nhìn thấy" các yếu tố được định nghĩa trong bộ phun ứng dụng. Điều này có nghĩa là nếu một nhà cung cấp không được tìm thấy trong nhà cung cấp này, nó sẽ được tự động tìm kiếm trong bộ tiêm phụ huynh này. Nếu không tìm thấy sau này, lỗi "không tìm thấy nhà cung cấp" sẽ bị ném.
- Máy quét
ChildComponent
sẽ tuân thủ cùng một quy tắc so với AppComponent
. Để chèn các phần tử liên quan đến chuỗi tiêm được thực thi forr thành phần, các nhà cung cấp sẽ được tìm kiếm đầu tiên trong bộ phun này, sau đó trong AppComponent
và cuối cùng là trong ứng dụng.
Câu trả lời này có thể cung cấp cho bạn chi tiết hơn về các kim phun thứ bậc:
Nguồn
2016-02-11 06:12:41
Nhưng bạn cần khai báo nó như một nhà cung cấp ở đâu đó .. thực sự câu hỏi là: Làm thế nào để khai báo nó như một nhà cung cấp bên trong trực tiếp bên trong nhà cung cấp –
Đã chỉnh sửa để trả lời câu đó. – SnareChops
Yea, nhưng tôi không muốn một singleton: ( –