Dagger-Android-参数

@Binds

提供返回值的实例,一种提供实例的另一种方式,针对接口

1
2
3
4
5
@Singleton
@Provides
static IRepositoryManager bindRepositoryManager(RepositoryManager repositoryManager){
return repositoryManager;
}

1
2
3
4
5
6
7
/**
* 告诉dagger,IRepositoryManager是由RepositoryManager实现的,需* 要在RepositoryManager的构造函数上加上 @Inject
* 并且你的构造函数中所需要的类,需要手动 @Provides 提供
*/
@Singleton
@Binds
abstract IRepositoryManager bindRepositoryManager(RepositoryManager repositoryManager);

AppComponent中的接口

1
2
3
4
5
public interface AppComponent extends AndroidInjector<JacquelineApp> {
//生成实例,如果是接口会去module寻找实现类
//如果实现类需要多个参数,则会生成各个参数需要的module
Application application();
}

@Provides

1
2
3
4
5
6
7
8
9
/**
* 如果提供的参数中存在接口,你需要同时提供该接口的实现类的 @Provides
* 如果有两个实现类,使用 @Name来区分
*/
@Singleton
@Provides
static Retrofit provideRetrofit(Application application, @Nullable RetrofitConfiguration configuration, Retrofit.Builder builder, OkHttpClient client
, HttpUrl httpUrl, Gson gson) {
}

Lazy<>

Lazy<Retrofit> mRetrofit;只会在第一次用到的时候才会去实例