我有一个关于Android Dagger 2以及使用@Inject和@Provide注释的问题.给出以下两个简化示例:
public class A {
String msg;
public A(String msg){
this.msg = msg;
}
}
public class B {
public A a;
public B(A a){
this.a = a;
}
}
@Module
public class AModule {
@Provides
A providesA(){
return new A("blah");
}
@Provides
B ProvidesB(A a)
{
return new B(a);
}
}
Run Code Online (Sandbox Code Playgroud)
这个例子是非常简单的,我在我的两个方法AModule与@Provides注解.因此,Dagger可以创建一个B使用A字符串实例的对象blah.
我的第二个例子如下:
public class A {
String msg;
public A(String msg){
this.msg …Run Code Online (Sandbox Code Playgroud) 我正在使用新的Dagger2(版本2.11),我正在使用像AndroidInjector和的新功能ContributesAndroidInjector.我有一个活动子组件,
@Module
abstract class ActivityBuilderModule {
@ContributesAndroidInjector(modules =
{UserListModule.class, MainFragmentModule.class})
@ActivityScope
abstract MainActivity bindsMainActivity();
}
@Module
public abstract class MainFragmentModule {
@ContributesAndroidInjector
@FragmentScope
@FragmentKey(UserListFragment.class)
abstract UserListFragment bindsUserListFragment();
}
Run Code Online (Sandbox Code Playgroud)
并UserListModule为片段提供依赖关系.一些依赖项我只想绑定实例,并返回,就像
@Binds
@ActivityScope
abstract UserListView mUserListView(UserListFragment userListFragment);
Run Code Online (Sandbox Code Playgroud)
而不仅仅是简单地返回依赖,就像
@Provides
@ActivityScope
UserListView mUserListView(UserListFragment userListFragment){
return userListFragment;
}
Run Code Online (Sandbox Code Playgroud)
我的模块也包含一些@Provides方法.我们可以同时使用@Binds,并@Provides在同一模块中的方法呢?我尝试如下所示
@Module
public abstract class UserListModule {
@Provides
@ActivityScope
UserListFragment mUserListFragment() {
return new UserListFragment();
}
@Binds
@ActivityScope
abstract UserListView mUserListView(UserListFragment userListFragment);
// other …Run Code Online (Sandbox Code Playgroud)