我认为我理解依赖注入如何与Dagger 2一起工作,直到我在此处查看此项目:https://github.com/saulmm/Avengers。Dagger 2本示例中的构造函数注入
public class CharacterDetailPresenter implements Presenter {
private final CharacterDetailsUsecase mGetCharacterInformationUsecase;
@Inject
public CharacterDetailPresenter(CharacterDetailsUsecase getCharacterInformationUsecase) {
mGetCharacterInformationUsecase = getCharacterInformationUsecase;
}
}
//presenter methods
在演讲注入活力:
public class CharacterDetailActivity extends AppCompatActivity implements CharacterDetailView {
@Inject CharacterDetailPresenter mCharacterDetailPresenter;
@Override
public void onCreate(Bundle savedInstanceState) {
initializeDepedencyInjector();
//
}
private void initializeDependencyInjector() {
AvengersApplication avengersApplication = (AvengersApplication) getApplication();
int avengerId = getIntent().getIntExtra(EXTRA_CHARACTER_ID, -1);
DaggerAvengerInformationComponent.builder()
.activityModule(new ActivityModule(this))
.appComponent(avengersApplication.getAppComponent())
.avengerInformationModule(new AvengerInformationModule(avengerId))
.build().inject(this);
}
//
}
,问题中的模块。
@Module
public class AvengerInformationModule {
private final int mCharacterId;
public AvengerInformationModule(int characterId) {
mCharacterId = characterId;
}
@Provides @Activity CharacterDetailsUsecase provideGetCharacterInformationUsecase (
CharacterRepository repository,
@Named("ui_thread") Scheduler uiThread,
@Named("executor_thread") Scheduler executorThread) {
return new CharacterDetailsUsecase(mCharacterId, repository, uiThread, executorThread);
}
@Provides @Activity GetCollectionUsecase provideGetCharacterComicsUsecase (CharacterRepository repository,
@Named("ui_thread") Scheduler uiThread,
@Named("executor_thread") Scheduler executorThread) {
return new GetCollectionUsecase(mCharacterId, repository, uiThread, executorThread);
}
}
我不明白当演讲者不在任何其他模块中时,如何将演示者注入到活动中。有没有关于我没有得到的构造函数注入?
最初这就是我认为匕首创建的主持人,但感谢清楚拼写出来。我肯定会在将来看看生成的代码。 – hakuteru
您的博客未显示如何执行构造函数注入的示例。我尝试过构造函数注入,但没有工作。请看看https://stackoverflow.com/q/45192878/5214893 –
@eCDroid我会看看工作。我真的建议你在尝试在你的项目中使用Dagger之前先尝试一下。打开一个文件,声明一堆包本地组件,模块,类(有和没有依赖关系),并继续编译。你会很快找出你可以和不可以用匕首这样做。确保你知道什么时候Dagger调用构造函数注入的构造函数,以及何时必须向组件注册一个'inject(MyClass)'方法来进行字段注入。 –