dagger2的使用便利我就不用说了,google为方便android开发者进而推出了dagger-android,这里附录官方文档:[https://google.github.io/dagger/android.html]
需要增加依赖:
compile 'com.google.dagger:dagger:' + dagger_version
compile "com.google.dagger:dagger-android:$dagger_version"
annotationProcessor 'com.google.dagger:dagger-compiler:' + dagger_version
compile "com.google.dagger:dagger-android-support:$dagger_version"
- 注入Activity 对象
1.1 在你的Component类中增加声明modules={ AndroidInjectionModule.class}
1.2 申明注解@Subcomponent,并继承自AndroidInjectror,并声明@Subcomponent.Builder:
@Subcomponent(modules = ...)
public interface YourActivitySubcomponent extends AndroidInjector<YourActivity> {
@Subcomponent.Builder
public abstract class Builder extends AndroidInjector.Builder<YourActivity> {}
}
1.3 定义一个与subcomponent绑定的module A,并且使A module与1.2定义的subcomponent绑定,最后把A module添加到已经注入了application的YourApplicationComponent中
@Module(subcomponents = YourActivitySubcomponent.class)
abstract class YourActivityModule {
@Binds
@IntoMap
@ActivityKey(YourActivity.class)
abstract AndroidInjector.Factory<? extends Activity>
bindYourActivityInjectorFactory(YourActivitySubcomponent.Builder builder);
}
@Component(modules = {..., YourActivityModule.class})
interface YourApplicationComponent {}
技巧说明: 如果定义的subcomponent和它的builder方法与1.2相比没有更多的方法或者继承,可以用@ContributesAndroidInjector 来自动实现1.2与1.3,实现方式: 添加抽象module,声明注解@ContributesAndroidInjector,如果subcomponent需要scope,声明scope注解
@ActivityScope
@ContributesAndroidInjector(modules = { /* modules to install into the subcomponent */ })
abstract YourActivity contributeYourActivityInjector();
1.4 当前应用的Application实现HasActivityInjector并且声明注解@Inject DispatchingAndroidInjector
public class YourApplication extends Application implements HasActivityInjector {
@Inject DispatchingAndroidInjector<Activity> dispatchingActivityInjector;
@Override
public void onCreate() {
super.onCreate();
DaggerYourApplicationComponent.create()
.inject(this);
}
@Override
public AndroidInjector<Activity> activityInjector() {
return dispatchingActivityInjector;
}
}
1.5 Activity的onCreate()方法里在super.onCreate()方法之前调用 AndroidInjection.inject(this)
实现过程:
AndroidInjectrion.inject()从Application那里得到DispatchingAndoridInjectro并传递到Activity中实现inject(Activity),而DispatchingAndroidInjector需要AndroidInjector.Factory(也即YourActivitySubcomponent.Builder),YourActivitySubcomponent创建了AndroidInjector并传递到Activity中注入
2、注入Fragment对象
注入Fragment与注入Fragment雷同,同样的方式定义subcomponent,用Fragment替换Activity,替换用@Fragmentkey替换@ActivityKey,用HasFragmentInjector替换HasActivityInjector,Activity在onCretate中注入,Fragment在onAttach中注入.