View
413
Download
2
Category
Preview:
Citation preview
PowerPoint Presentation
Dagger2:
?
public class NetworkClient {
}private static final class NetworkClientHolder { static NetworkClient INSTANCE = new NetworkClient();}public FutureTask execute(Request request) { ...}public NetworkClient() { this.client = new OkHttpClient();}public static NetworkClient getInstance() { return NetworkClientHolder.INSTANCE;}
public static NetworkClient getInstance() { return NetworkClientHolder.INSTANCE;}public class MyFragment extends Fragment {
}
@Override public void onResume() { super.onResume(); updateFeed(); }
private void updateFeed() { NetworkClient client = NetworkClient.getInstance(); FutureTask response = client.execute(request); ...}
public static NetworkClient getInstance() { return NetworkClientHolder.INSTANCE;}.
- - :
MyActivityNetworkClientOkHttpClientMyActivityOkHttpClientNetworkClient
public class NetworkClient {
}public FutureTask execute(Request request) { ...}public NetworkClient(Client client) { this.client = client;}
public class MyFragment extends Fragment {
@Override public void onResume() { super.onResume();
updateFeed(); }
}
private void updateFeed() { NetworkClient client = NetworkClient.getInstance(); FutureTask response = client.execute(request); ...}private void updateFeed() { Client client = new OkHttpClient(); NetworkClient client = new NetworkClient(client); FutureTask response = client.execute(request); ...}
c Dagger2
@Modulepublic class NetworkModule {
}@Provides@SingletonClient provideOkHttpClient() { return new OkHttpClient();}
-
NetworkClient constructor injectionpublic class NetworkClient {
}public FutureTask execute(Request request) { ...}public NetworkClient(Client client) { this.client = client;}@Inject@Singletonprivate final Client client;
NetworkClient setter injectionpublic class NetworkClient {
}public FutureTask execute(Request request) { ...}public void setClient(Client client) { this.client = client;}@Inject@Singletonpublic NetworkClient() {
}@Injectprivate final Client client;private Client client;
NetworkClient Dagger2public class MyFragment extends Fragment {
}
private void updateFeed() { Client client = new OkHttpClient(); NetworkClient client = new NetworkClient(client); FutureTask response = client.execute(request); ...}private void updateFeed() { FutureTask response = client.execute(request); ...}@Inject NetworkClient client;@Overridepublic void onActivityCreated(Bundle state) { super.onActivityCreated(state); getComponent().inject(this);}
Injection
@Component
@Component(modules = { NetworkModule.class })public interface AppComponent {
}@Singleton
?@Generated("dagger.internal.codegen.ComponentProcessor")public final class MyFragment_MembersInjector implements MembersInjector { private final MembersInjector supertypeInjector; private final Provider clientProvider;
public MyFragment_MembersInjector(MembersInjector supertypeInjector, Provider clientProvider) { assert supertypeInjector != null; this.supertypeInjector = supertypeInjector; assert clientProvider != null; this.clientProvider = clientProvider; }
@Override public void injectMembers(MyFragment instance) { if (instance == null) { throw new NullPointerException("Cannot inject members into a null reference"); } supertypeInjector.injectMembers(instance); instance.client = clientProvider.get(); }
public static MembersInjector create(MembersInjector supertypeInjector, Provider clientProvider) { return new MyFragment_MembersInjector(supertypeInjector, clientProvider); }}
@Component vs @Subcomponent@PerActivity@Subcomponent(modules = ActivityModule.class)public interface ActivitySubcomponent {
}
@Component(modules = { NetworkModule.class })public interface AppComponent {
ActivitySubcomponent plus(ActivityModule module);}
@Subcomponent
plus()
, !
@Qualifier@Modulepublic class NetworkModule {
@Provides @Singleton NetworkClient taxiClient(Client client) { return new NetworkClient(client, "https://taxi.yandex.ru/api"); }
@Provides @Singleton NetworkClient mapsClient(Client client) { return new NetworkClient(client, "https://maps.yandex.ru/api"); }}@Named("taxi")@Named("maps")
@Qualifier@Inject@Named("taxi")NetworkClient taxiClient;
@Inject@Named("maps")NetworkClient mapsClient;
Dagger IntelliJ Pluginhttps://github.com/square/dagger-intellij-plugin
?
Proguard
Dagger1: http://square.github.io/dagger/
Dagger2: http://google.github.io/dagger
(U2020 Dagger2): https://clck.ru/9aSsV
: https://clck.ru/9aVu4
DAGGER 2 - A New Type of dependency injection: http://www.youtube.com/watch?v=oK_XtfXPkqw
! @dpolishukdeepol@yandex-team.ru
Recommended