博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Dagger学习之实践篇
阅读量:7121 次
发布时间:2019-06-28

本文共 2061 字,大约阅读时间需要 6 分钟。

hot3.png

基于已有的项目结构引入Dagger,不能完全按照项目的架构去写,只能是增加引入Dagger。

环境搭建

1,gradle中增加插件android-apt

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中应用插件

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
applicationInjector() { return DaggerAppComponent.builder().build(); }}

4,创建AppComponent

@Singleton@Component(modules = {ActivityBindModule.class, AndroidSupportInjectionModule.class})public interface AppComponent extends AndroidInjector
{}

5,创建AndroidBindModule,配置需要使用Dagger的Activity(继承DaggerAppCompatActivity)

@Modulepublic abstract class ActivityBindModule {    @ContributesAndroidInjector(modules = {HomeModule.class, DashboardModule.class, NotificationsModule.class})    abstract MainActivity mainActivity();}

6,创建HomeModule

@Modulepublic abstract class HomeModule {    @ContributesAndroidInjector    abstract HomeFragment fragment();    @Provides    static HomePresenter homePresenter() {        return new HomePresenter();    }}

遗留问题:

1,HomeFragment中presenter的声明是HomePresenter,不是IContract.IPresenter

2,未引入@ActivityScoped,@FragmentScoped

小结:

  • @Inject标注的属性不能是private
  • @Provides标注的方法不能是抽象方法
  • @Component标注的接口至少有一个方法,否则编译不会生成实现类

 

 

转载于:https://my.oschina.net/u/219974/blog/1540617

你可能感兴趣的文章
ajax封装
查看>>
例题9-6 UVa11400 Lighting System Design(DP)
查看>>
PAT1087 All Roads Lead to Rome (30)(最短路径+dfs+回溯)
查看>>
Arcgis Engine 添加一个Symbol符号样式步骤
查看>>
kafka 控制台命令
查看>>
alpha冲刺10
查看>>
睡觉了~~
查看>>
【LeetCode】28 - Implement strStr()
查看>>
Node.js与Sails~Model数据模型
查看>>
[转]没有找到 MFC42D.DLL,因此这个应用程序未能启动。重新安装应用程序可能会修复此问题。解决方法!...
查看>>
我再也不-或许永远不-用zend studio-受够了!
查看>>
软件工程(2019)第三次作业
查看>>
Java性能调优
查看>>
第 6 章 存储 - 039 - Data Volume 之 bind mount
查看>>
异步IO
查看>>
MySQL
查看>>
【转】Linux内核结构详解
查看>>
DevExpress学习03——label控件的背景色问题
查看>>
Cass环境下光标无显示
查看>>
linux系统监控命令汇总
查看>>