如果没有阅读Part1请先阅读
使用DaggerActivity, DaggerFragment, DaggerApplication
在上述代码中,在进行注入时每一个Activity中都需要实现HasFragmentInjector或者HasSupportFragmentInjector接口,再进行注入,在Dagger 2 中对接口的实现和注入进行封装
修改AppComponent, 使得AppComponent继承AndroidInjector<DaggerApplication>,将AndroidInjectionModule修改为AndroidSupportInjectionModule
@Singleton
@Component(modules = {AndroidSupportInjectionModule.class, AppModule.class, ActivityBuildersModule.class})
public interface AppComponent extends AndroidInjector<DaggerApplication> {
@Component.Builder
interface Builder {
@BindsInstance
Builder application(Application application);
AppComponent build();
}
void inject(AppApplication app);
@Override
void inject(DaggerApplication instance);
}
修改AppApplcation
public class AppApplication extends DaggerApplication {
@Override
protected AndroidInjector<? extends DaggerApplication> applicationInjector() {
AppComponent appComponent=DaggerAppComponent.builder().application(this).build();
appComponent.inject(this);
return appComponent;
}
}
修改MainActivity
public class MainActivity extends DaggerAppCompatActivity {
@Inject
DispatchingAndroidInjector<Fragment> dispatchingAndroidInjector;
@Inject
MainFragment mainFragment;
@Inject
Context context;
@Inject
Bean bean;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AndroidInjection.inject(this);
setContentView(R.layout.activity_main);
getSupportFragmentManager().beginTransaction().replace(R.id.container, mainFragment).commitAllowingStateLoss();
bean.printInfo();
}
}