# Nó làm việc như thế nào?

Trước khi chúng ta nhảy vào xây dựng một service, chúng ta hãy xem cách các services và dependency injection làm việc trong Angular. Trong sơ đồ dưới đây, bên trái là service của chúng ta, bên phải là component cần service này.

Có hai cách để component có thể làm việc với service này.

Component có thể tạo một thể hiện của lớp service và sử dụng chúng. Điều đó đơn giản, và nó sẽ hoạt động. Nhưng thể hiện này là địa phương bên trong component, do đó chúng ta không thể chia sẻ dữ liệu hoặc tài nguyên khác, và nó sẽ khó khăn để mô phỏng service cho testing. Ngoài ra, chúng ta có thể đăng ký service này với Angular. Angular sau đó tạo ra một thực thể duy nhất của service class này, được gọi là singleton, và giữ nó. Cụ thể, Angular cung cấp một injector dựng sẵn. Chúng ta đăng ký những services với Angular injector, cái mà cung cấp một container những thể hiện service đã được tạo ra. Injector tạo ra và quản lý thể hiện duy nhất hoặc singleton của mỗi dịch vụ đã đăng ký theo yêu cầu.

Trong ví dụ này, Angular injector đang quan lý 3 thể hiện của 3 service khác nhau log, math và myService (viết tắt svc). Nếu component của chúng ta cần một service, component class định nghĩa một service như một dependency. Angular injector sau đó cung cấp hoặc inject thể hiện service class khi component class được khởi tạo. Tiến trình này được gọi là dependency injection. Khi đó Angular quản lý các thể hiện duy nhất, bất kỳ dữ liệu hoặc logic trong thể hiện đó được chia sẻ với tất cả các class sử dụng nó. Kỹ thuật này là cách được khuyến cáo sử dụng service, vì nó cung cấp quản lý tốt hơn cho các thể hiện của service. Nó cho phép chia sẻ dữ liệu và các tài nguyên khác, và nó dễ dàng hơn để mô phỏng các service cho các mục đích kiểm thử. Bây giờ chúng ta hãy xem xét một định nghĩa chính thức hơn về dependency injection.

Bây giờ chúng ta đã hiểu ý tưởng về cách service và dependency injection làm việc trong Angular, hãy bắt tay vào xây dựng một service.
