Dagger 2 - là một dependency injection framework. Nó được áp dụng để genaration code thông qua những base anotation, code được genartion ra rất dễ dàng phát âm cùng debug

Chuẩn bị
Trước khi ban đầu bạn thích các bạn tìm hiểu qua về SOLID principles đó là mọi nguyên tắc xây đắp cùng viết code. Sau kia tại đây mình vẫn chỉ nhấn mạnh vấn đề nguyên lý sau cùng SOLID đó đó là Dependency Inversion:
Dependency inversion principle
1. Các module cấp cao không nên nhờ vào vào các modules thấp cấp. Cả 2 đề nghị nhờ vào vào abstraction.2. Interface (abstraction) tránh việc phụ thuộc vào chi tiết, mà hoàn toàn trái ngược. ( Các class giao tiếp cùng nhau thông qua interface, chưa phải thông qua implementation.)Với biện pháp code thông thường, những module cao cấp đang Gọi những module cấp thấp. Module cấp cao đang nhờ vào và module thấp cấp, điều đó tạo nên những dependency. Lúc module thấp cấp thay đổi, module cao cấp buộc phải chuyển đổi theo. Một đổi khác đang kéo theo một loạt đổi khác, sút năng lực gia hạn của code.Chính vì chưng vậy nêú theo đúng Dependendy Inversion principle, các module thuộc dựa vào vào 1 interface không thay đổi. Ta có thể dễ dãi thay thế sửa chữa, sửa thay đổi module cấp thấp cơ mà ko ảnh hưởng gì cho tới module V.I.P.
Bạn đang xem: Dagger là gì
Định nghĩa với có mang DITrong thời điểm này, các xây dựng viên giỏi lộn lạo thân những có mang Dependency Inversion, Inversion of Control (IoC), Dependency Injection (DI). Ba khái niệm này tương tự như nhau dẫu vậy không trọn vẹn giống nhau.
cũng có thể phát âm Dependency Injection một biện pháp đơn giản và dễ dàng như sau:
Các module ko giao tiếp thẳng cùng nhau, nhưng thông qua interface. Module thấp cấp đã implement interface, module cấp cao đã hotline module thấp cấp trải qua interface.Ví dụ: Để giao tiếp cùng với database, ta gồm interface IDatabase, các module thấp cấp là XMLDatabase, SQLDatabase.Module cao cấp là CustomerBusiness vẫn chỉ sử dụng interface IDatabase.Việc khởi tạo nên những module cấp thấp đã vì chưng DI Container thực hiện. Ví dụ: Trong module CustomerBusiness, ta sẽ không còn khởi tạo IDatabase db = new XMLDatabase(), bài toán này đã vày DI Container thực hiện. Module CustomerBusiness sẽ không còn biết những gì về module XMLDatabase tuyệt SQLDatabase.Việc Module như thế nào đính cùng với interface làm sao sẽ được config trong code hoặc vào tệp tin XML.DI được sử dụng để gia công bớt sự phụ thuộc giữa những module, dễ dàng hơn trong bài toán thay đổi module, bảo trì code và testing.
Dependency Injection with Dagger 2
Dagger 2 là gì ?Là một dependency injector, không giống cùng với các dependency injector giành cho việc tiến hành vận dụng Enterprise như Spring IoC giỏi JavaEE CDI. Dagger Được thiết kế cho những vật dụng low-kết thúc, nhỏ gọn tuy nhiên vẫn không thiếu thốn thiên tài.Hầu hết các dependency injector thực hiện reflection để tạo ra với inject những module. Reflection nkhô cứng và tương thích cho những version Android cũ cơ mà reflection tạo ra trở ngại không nhỏ vào Việc debug tốt tracking khi chạm chán lỗi.Tgiỏi bằng Việc thực hiện reflection Dagger áp dụng một trình biên dịch trước (pre-compiler), trình biên chất dịch này tạo nên tất cả các lớp, các module quan trọng để gia công việc.Dagger ít khỏe mạnh so với các dependency injector khác tuy nhiên rứa vào đó Dagger lại thanh thanh cùng thuận lợi sử dụng cũng như gần như loại bỏ đi được điểm yếu kém của dependency injector là kỹ năng tracking bugDagger 2 thực hiện chủ yếu các anotation sau :Định nghĩa dependency providers (object providers)
Trong Dagger 2 class có anotation
Module bao gồm trách rưới nhiệm cung ứng các object hoàn toàn có thể được inject.Các class điều đó hoàn toàn có thể tư tưởng những phương thức với anotated
Provides. Các đối tượng trả về trường đoản cú những cách tiến hành này có sẵn dependency nhằm inject.Định nghĩa dependency (object consumers) Bạn hoàn toàn có thể sử dụng
Inject cùng với constructor,Dagger 2 hoàn toàn có thể sử dụng 1 instance này để xong dependencies.Vấn đề này được thực hiện để tránh Việc define các phương thức
Component được áp dụng trong một interface.Interface này được áp dụng vày Dagger2 nhằm mục tiêu generate code, kết nối thân module với đối tượng người tiêu dùng diễn tả sự phụ thuộc. Sau đây là bảng tổng quan giải pháp sử dụnganotate trong dagger :Table 1. Annotation summary of Dagger 2
Component | Used on an interface. This interface is used by Dagger 2 to lớn generate code which uses the modules to fulfill the requested dependencies. |
Note: Dagger không tự động hóa inject các fields. Nó cũng tất yêu inject các private fields, giả dụ bạn có nhu cầu sử dụng inject field, các bạn sẽ define 1 method vào
Component interface trong những số đó rước instance mà bạn muốn inject làm cho tđê mê số.
Kết luận
Qua nội dung bài viết này mong muốn tất cả những chúng ta có thể tưởng tượng qua tư tưởng về Dependency injection,để tự đó bao gồm ánh nhìn cho Dagger 2, quý phái bài bác tiếp theo sau mình vẫn triển khác quá trình để inject dagger vào 1 project nhỏ dại app android. Ở nội dung bài viết này mình đã cố gắng xem thêm từ rất nhiều mối cung cấp nhưng lại lượng kỹ năng và kiến thức hạn chế ước ao nhận thấy sự đóng góp của chúng ta.Cảm ơn phần nhiều fan !