Tutorial dasar dagger 2

  -  

Dagger 2 - là một trong những dependency injection framework nằm trong dạng compile-time với fully static. Tách biệt khởi tạo/sử dụng, thuận tiện kiểm tra hơn(kiểm tra đơn vị chức năng và chức năng), tài năng mở rộng tốt hơn - phía trên chỉ là 1 trong vài ba tiện ích từ những việc sử dụng depedency injection framework nhỏng Dagger 2.

Bạn đang xem: Tutorial dasar dagger 2

Sau một vài nội dung bài viết trước trình bày có tác dụng rứa nào để triển khai vấn đề cùng với DI. Bài viết này vẫn share kinh nghiệm làm việc với Dagger 2 vào cách tân và phát triển áp dụng production.


Subcomponent

Không được trình bày ví dụ trong các tutorial đơn giản và dễ dàng, dẫu vậy tuỳ chỉnh phạm vi (custom scope) là một trong Một trong những nhân kiệt trẻ trung và tràn đầy năng lượng nhất vào Dagger 2. Trong những application phức hợp, chỉ thực hiện phạm vi
Singleton là không đủ nhằm giải quyết vấn đề.

Hãy để ý ví dụ 1-1 giản: chúng ta tất cả các phụ thuộc (depedencies) được liên kết ngặt nghèo với người tiêu dùng (user) hiện nay đang đăng nhập (ví dụ: class UserProfilePresenter chịu trách nát nhiệm về logic vào màn hình hiển thị UserProfile). Tgiỏi vị Call tới bộ nhớ dữ liệu mỗi khi bắt buộc thực thể user, bạn cũng có thể tạo ra phạm vi
User và giữ lại tất cả những nhờ vào tương quan nhỏng là 1 trong single instance trong UserComponent mà lại sống thọ (live) trong veo quy trình user vẫn đang còn singin.

Trong Dagger 2, chúng ta có 2 phương pháp để thực hiện custom scope là thừa kế hoặc mở rộng đồ thị dựa vào (object graph):

Chúng ta rất có thể xây dừng một
Component( modules = UserModule.class, dependencies = AppComponent.class)public interface UserComponent UserProfileActivity inject(UserProfileActivity activity);Hoặc, chúng ta có thể có mang một
Subcomponent( modules = UserModule.class)public interface UserComponent UserProfileActivity inject(UserProfileActivity activity);//===== AppComponent.java =====
Component(modules = ...)public interface AppComponent // Factory method to create subcomponent UserComponent plus(UserModule module);

Sự biệt lập thân 2 cách thức này là gì?


Subcomponent có quyền truy vấn vào tất cả các phụ thuộc vào (depedencies) từ Component cha mẹ. Trong Lúc
Component chỉ được truy cập vào phần nhiều depedencies được công khai (public) vào interface của Component các đại lý.

Lúc số lượng method biến đổi vấn đề

Tuy nhiên, gồm một sự biệt lập quan trọng đặc biệt nữa giữa
Component. Chúng ta hãy thuộc nhìn vào phần generated code được Dagger 2 auto tạo thành. Phần implement của interface Subcomponent chỉ là 1 trong inner class bên trong Component.

Xem thêm: Connected To Dota2 Game Coordinator, Logging In Ator Logging In Error

Cụ thể, UserProfileActivityComponent nhưng phụ thuộc vào AppComponent sẽ tạo ra code như thế này:

public final class DaggerAppComponent implements AppComponent //...AppComponent code... private final class UserProfileActivityComponentImpl implements UserProfileActivityComponent private final UserProfileActivityComponent.UserProfileActivityModule userProfileActivityModule; private ProviderUserProfileActivity> provideActivityProvider; private ProviderUserProfileActivityPresenter> userProfileActivityPresenterProvider; private MembersInjectorUserProfileActivity> userProfileActivityMembersInjector; private UserProfileActivityComponentImpl( UserProfileActivityComponent.UserProfileActivityModule userProfileActivityModule) this.userProfileActivityModule = Preconditions.checkNotNull(userProfileActivityModule); initialize(); private void initialize() this.provideActivityProvider = DoubleCheông chồng.provider(BaseActivityModule_ProvideActivityFactory.create(userProfileActivityModule)); this.userProfileActivityPresenterProvider = DoubleChechồng.provider( UserProfileActivityPresenter_Factory.create( MembersInjectors.UserProfileActivityPresenter>noOp(), provideActivityProvider, DaggerAppComponent.this.logoutManagerProvider, DaggerAppComponent.this.userManagerProvider) ); this.userProfileActivityMembersInjector = UserProfileActivity_MembersInjector.create( DaggerAppComponent.this.logoutManagerProvider, DaggerAppComponent.this.userManagerProvider userProfileActivityPresenterProvider) );
Override public UserProfileActivity inject(UserProfileActivity activity) userProfileActivityMembersInjector.injectMembers(activity); return activity; Dòng 20-31 chỉ cho bọn họ thấy giải pháp Dagger hỗ trợ những depedencies cần thiết từ bỏ AppComponent cho tới UserProfileActivityComponent. Subcomponent tất cả quyền truy vấn vào các fields được cung ứng của Component đại lý nhằm chúng hoàn toàn có thể được áp dụng thẳng.

Mọi trang bị là khác nhau cùng với phụ thuộc
Component
. Cấu trúc tựa như (UserProfileActivityComponent phụ thuộc vào AppComponent ) sẽ tiến hành tạo thành code nlỗi sau:

public final class DaggerUserProfileActivityComponent implements UserProfileActivityComponent private ProviderLogoutManager> logoutManagerProvider; private ProviderUserManager> userManagerProvider; //... private DaggerUserProfileActivityComponent(Builder builder) assert builder != null; initialize(builder);
SuppressWarnings("unchecked") private void initialize(final Builder builder) this.logoutManagerProvider = new FactoryLogoutManager>() private final AppComponent appComponent = builder.appComponent;
Override public LogoutManager get() return Preconditions.checkNotNull( appComponent.getLogoutManager(), "Cannot return null from a component method"); ; this.userManagerProvider = new FactoryUserManager>() private final AppComponent appComponent = builder.appComponent;
Override public UserManager get() return Preconditions.checkNotNull( appComponent.getUserManager(), "Cannot return null from a component method"); ; //... more providers ....
Override public UserProfileActivity inject(UserProfileActivity activity) userProfileActivityMembersInjector.injectMembers(activity); return activity; //...Dòng 14-34 cho biết rằng, từng dependency thưởng thức từ AppComponent cần phải tất cả method riêng rẽ nhưng hỗ trợ đối tượng người dùng Provider mang lại nó.Tại sao? Bởi vày Component nhờ vào chỉ có thể truy cập vào các dependencies trong Component các đại lý được exposed với public interface của chính nó.

Điều này còn có ý nghĩa gì cùng với bọn họ - những người dân cải tiến và phát triển áp dụng Android? Mỗi dependency vào componet phụ thuộc vào được lấy từ bỏ component các đại lý sẽ khiến con số method càng ngày gần con số giới hạn là 65k mothod.

Phân tích APK một giải pháp nkhô cứng chóng

Bắt đầu từ Android Studio 2.2, tất cả một tính năng mới được cho phép họ đối chiếu file APK. Chúng ta hoàn toàn có thể truy vấn tự Build -> Analyze APK….

Xem thêm: Cách Thay Đổi Icon Cho Iphone Trong Ios 14, Hướng Dẫn Chi Tiết Cách Thay Icon Ios 14 Ý Muốn

*

Kết luận

Bởi bởi vậy, họ nên ra quyết định thực hiện
Component
nhờ vào. Làm như vậy bạn có thể sút được rất nhiều số lượng method (vào trường hòa hợp của tôi là ~5000 methods).