jeudi 23 avril 2015

Dagger2 multi-module design

For Dagger2 release , i plan to split the module into few small module for re-use on other projects.

Application Module contains many things, i can group it into three type. Type A related, Type B related, Type C related.

so i want to put it into three different module , therefore it can re-use part of it if need on other projects.

Reference from the Google's Fork

build.gradle for Application

buildscript {
repositories {
    jcenter()
}
dependencies {
    classpath 'com.android.tools.build:gradle:1.1.0'
    classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4'

    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
    }
}
allprojects {
    repositories {
        mavenCentral()
    }
}

build.gradle for app module

apply plugin: 'com.neenbedankt.android-apt'
//below lines go to dependenc
compile 'com.google.dagger:dagger:2.0'
apt 'com.google.dagger:dagger-compiler:2.0'
provided 'org.glassfish:javax.annotation:10.0-b28'

after above steps , i am going to create my application module

@dagger.Module
public class MyApplicationModule {
void inject(MyApplication application);

and my component

@Singleton
@Component(
        modules = {TypeA.class, TypeB.class, TypeC.class})
public interface MyApplicationComponent {

When i use it on activity , it looks like

@Component(dependencies = MyApplicationComponent.class,
        modules = ActivityModule.class)
public interface ActivityComponent {

    void injectActivity(SplashScreenActivity activity);

There are compile issue

Error:(22, 10) error: XXXXXX cannot be provided without an @Provides- or @Produces-annotated method. com.myapplication.mXXX [injected field of type: XXX]

i guess there are something wrong when i config that Activity Component extends from application component.

my purpose is some singleton object inside Application Component , activity will inject same object to reduce some object create every time on activity. is my design wrong?? or any other things need to do for config??

Aucun commentaire:

Enregistrer un commentaire