基於已有的項目結構引入Dagger,不能徹底按照項目android-architecture的架構去寫,只能是增長引入Dagger。java
環境搭建android
1,gradle中增長插件android-aptgit
buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.3.3' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'//看這裏,看這裏,看這裏 } } allprojects { repositories { jcenter() } } task clean(type: Delete) { delete rootProject.buildDir }
2,gradle中應用插件github
apply plugin: 'com.neenbedankt.android-apt'//這裏應用插件 dependencies { //dagger apt 'com.google.dagger:dagger-compiler:2.11' provided 'org.glassfish:javax.annotation:10.0-b28' compile 'com.google.dagger:dagger:2.11' compile 'com.google.dagger:dagger-android:2.11' compile 'com.google.dagger:dagger-android-support:2.11' apt 'com.google.dagger:dagger-android-processor:2.11' }
3,增長一個繼承DaggerApplication的類App架構
public class App extends DaggerApplication { @Override protected AndroidInjector<? extends DaggerApplication> applicationInjector() { return DaggerAppComponent.builder().build(); } }
4,建立AppComponentapp
@Singleton @Component(modules = {ActivityBindModule.class, AndroidSupportInjectionModule.class}) public interface AppComponent extends AndroidInjector<App> { }
5,建立AndroidBindModule,配置須要使用Dagger的Activity(繼承DaggerAppCompatActivity)ide
@Module public abstract class ActivityBindModule { @ContributesAndroidInjector(modules = {HomeModule.class, DashboardModule.class, NotificationsModule.class}) abstract MainActivity mainActivity(); }
6,建立HomeModulegradle
@Module public abstract class HomeModule { @ContributesAndroidInjector abstract HomeFragment fragment(); @Provides static HomePresenter homePresenter() { return new HomePresenter(); } }
遺留問題:ui
1,HomeFragment中presenter的聲明是HomePresenter,不是IContract.IPresentergoogle
2,未引入@ActivityScoped,@FragmentScoped
小結: