我无法理解告诉组件他的模块是什么和告诉组件它的组件依赖项是什么之间的区别。
例如:
@Module public class ModuleA {
@Provides DependencyA providesDependencyA() {
return new DependencyA();
}
}
@Module public class ModuleB {
@Provides DependencyB providesDependencyB() {
return new DependencyB();
}
}
@Component (modules = {ModuleA.class})
public interface ComponentA {
DependencyA getDependencyA();
}
Run Code Online (Sandbox Code Playgroud)
这有什么区别:
@Component (modules = {ModuleA.class, ModuleB.class})
public interface ComponentB {
DependencyB getDependencyB();
}
Run Code Online (Sandbox Code Playgroud)
然后:
@Component (dependencies = {ComponentA.class}, modules = {ModuleB.class})
public interface ComponentB {
DependencyB getDependencyB();
}
Run Code Online (Sandbox Code Playgroud) 匕首模块
@Module
public class NetModule {
@Provides
@Singleton
Gson provideGson() {
GsonBuilder gsonBuilder = new GsonBuilder();
return gsonBuilder.create();
}
@Provides
@Singleton
OkHttpClient provideOkHttpClient() {
OkHttpClient client = new OkHttpClient();
return client;
}
@Provides
@Singleton
Retrofit provideRetrofit(Gson gson, OkHttpClient okHttpClient) {
Retrofit retrofit = new Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create(gson))
.baseUrl(BuildConfig.SERVER_BASE_URL)
.client(okHttpClient)
.build();
return retrofit;
}
}
@Module
public class AppModule{
private Application application;
public AppModule(Application application){
this.application = application;
}
@Provides
@Singleton
Application provideApplication() {
return application;
}
}
@Module
public class ImageModule …Run Code Online (Sandbox Code Playgroud) 我需要按需注入我的一个类的实例的字段,即在运行时,因为我正在即时实例化它们。
我曾经为此使用 Guice 来调用MembersInjector#injectMembers或Injector#injectMembers。我怎么能在 Dagger 2 中有这样的东西?