Tôi đang làm việc trên thư viện Android về cơ bản là một khách hàng cho một số dịch vụ REST mà tôi đã viết. Tôi có một số lớp lưu trữ, hàng đợi mạng, trình phân tích cú pháp, v.v. và giống như nhiều lớp như vậy, chúng có phụ thuộc vào Context
hoặc trên những thứ như SharedPreferences
được tạo từ Context
. Tất cả các đối tượng này đều ẩn sau lớp mặt tiền, vì vậy người tiêu dùng thư viện của tôi không nhìn thấy chúng hoặc tương tác trực tiếp với họ.Tôi làm cách nào để xây dựng thư viện Android dựa trên Dagger mà không buộc phải sử dụng ứng dụng để sử dụng Dagger?
Vì sự tỉnh táo của riêng tôi, tôi muốn sử dụng Dagger 2 để tiêm phụ thuộc để quản lý các phiên bản của các lớp này INTERNALLY trong thư viện của tôi. Tuy nhiên, tôi không muốn ép buộc các ứng dụng sử dụng thư viện của mình để sử dụng Dagger; chỉ vì tôi đã chọn sử dụng Dagger không có nghĩa là người dùng của tôi phải có.
Tất cả các hướng dẫn tôi đã thấy dường như mong đợi rằng tôi đang xây dựng một ứng dụng, không chỉ là một thư viện. Nhiều hướng dẫn này cho tôi biết tôi nên tạo lớp Application
được kế thừa từ DaggerApplication
. Tuy nhiên, trong trường hợp của tôi, tôi không có Application
(hoặc bất kỳ lớp nào Activity
hoặc Service`) trong thư viện của mình, và tôi không muốn người dùng của mình phải sử dụng các lớp cơ sở của Dagger.
Vậy làm cách nào tôi có thể sử dụng Dagger mà không bị "rò rỉ" nó khỏi thư viện của mình? Tôi đã tìm thấy một câu trả lời một phần here, nhưng tôi không chắc chắn cách điều chỉnh mẫu "trình bao bọc" của tác giả để xử lý sự phụ thuộc của tôi trên Context
. Tôi có thể chuyển một ngữ cảnh vào phương thức getComponent()
của trình bao bọc hay Dagger có thể lấy một tham chiếu Ngữ cảnh theo một cách khác không?
Cảm ơn bạn rất nhiều vì câu trả lời này! Tôi đã theo dõi các đề xuất của bạn và mọi thứ đang hoạt động tốt. – Dalbergia
Ứng dụng có hoạt động không? Tiếp theo quá trình tương tự nhưng không hoạt động. Tôi nhận được "không thể tìm thấy biểu tượng lớp DaggerYourComponent" lỗi trong khi xây dựng các ứng dụng. @ Dalbergia, Có phải nó hoạt động mà không có thành phần giao diện người dùng của Android không? –
Nó làm việc cho tôi và rõ ràng OP cũng làm cho nó hoạt động. @TejasMehta thử làm sạch/xây dựng lại hoặc một cái gì đó. Lỗi của bạn có nghĩa là thành phần của bạn không được tạo đúng cách hoặc bạn không sử dụng đúng tên. –