我最近一直在学习DI和Dagger 2,我觉得我最终得到的结果比我开始时更多。我的设置包括
AppComponent
- 提供Application
,Resources
和其他与网络相关的内容。 @Singleton
Scoped。Feature1Component
,Feature2Component
.... - 提供跨屏幕使用的存储库。 @Feature
作用域AppComponent
的子组件。Screen1Component
。有'加'屏幕组件的方法。 Screen2Component
,FeatureXComponent
... - 这就是样板的感觉 - 每个屏幕组件只有一个'注入'用于描绘屏幕的片段/活动的方法。子组件@Module
public class Screen1Module
{
private final Screen1Contract.View view;
public Screen1Module(Screen1Contract.View view)
{
this.view = view;
}
@Provides
public Screen1Contract.View provideView()
{
return view;
}
}
。每个相应的模块最终看起来像这样:
((MyApplication) getActivity().getApplication())
.getFeature1Component()
.newScreen1Component(new Screen1Module(this))
.inject(this);
因此,对于每个屏幕,我最终都会编写一个组件和模块,因为我只能调用以下内容:
(Activity or Fragment)
当我初始化我的观点$( "a" ).on( "click", function() {
$( this ).css( "box-shadow", "none" );
});
时,为了只注入演示者。
有没有办法做到这一点,不涉及太多的样板?我希望能够在"功能"水平,但我想这并不可能,因为屏幕的生命周期比功能短。
答案 0 :(得分:0)
这就是为什么dagger-android
出生于匕首2.10之后。它简化了Android核心类型的注入。
@ContributesAndroidInjector
替换子组件。 DaggerActivity
和其他人摆脱getComponent()....inject(this)