在Android中使用Dagger2-Part2

320 阅读1分钟

如果没有阅读Part1请先阅读

在Android中使用Dagger2-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();
        }
    }

源码地址

在Android中使用Dagger2-Part3