2013-06-07 12 views
5

私はAndroidアプリケーションを持っており、短剣を使用しようとしています。グローバルグラフ+アクティビティグラフを使用することに決めました。私は三つのモジュールがあります。ダガーアクティビティグラフとモジュールの分離

AndroidModule

@Module(library = true) 
public class AndroidModule { 

    private final MApplication mApplication; 

    public AndroidModule(MyApplication application) { 
    mApplication = application; 
    } 

    @Provides @Singleton @ForApplication Context provideApplicationContext() { 
    return mApplication; 
    } 
} 

MyAppModules私はそれなしで、使用ActivityModuleためMyAppModuleに含める必要がありました

@Module(
    injects = { 
      MainActivity.class, 
      AddFragment.class, 
      AddMapFragment.class, 
      MyActivity.class, 
      ListFragment.class, 
      MyMapFragment.class, 
      RetainFragment.class, 
      SingleActivity.class, 
      UserActivity.class, 
      UserLoginFragment.class, 
      UserProfileActivity.class, 
      UserProfileFragment.class, 
      UserRegisterFragment.class, 
      WelcomeFragment.class 
    }, 
    complete = false, 
    library = true, 
    includes = ActivityModule.class 
) 
public class MyAppModule { 

    private final Bus mBus = new Bus(); 

    @Provides @Singleton Bus provideBus() { 
    return mBus; 
    } 

    @Provides @Singleton 
    RequestQueue provideRequestQueue(@ForApplication Context context) { 
    return Volley.newRequestQueue(context); 
    } 

    @Provides @Singleton Api provideApi(RequestQueue queue) { 
    return new AppApi(queue); 
    } 

    @Provides Logger provideLogger() { 
    return new MyLogger(); 
    } 
} 

ActivityModule

@Module(
    complete = false, 
    library = true 
) 
public class ActivityModule { 

    private BaseActivity mActivity; 
    public ActivityModule() {} 

    public ActivityModule(BaseActivity activity) { 
    mActivity = activity; 
    } 

    @Provides @Singleton @ForActivity Context provideActivityContext() { 
    return mActivity; 
    } 

    @Provides @Singleton LocationClientFactory provideLocationClientFactory() { 
    return new LocationClientFactory(mActivity); 
    } 
} 

を、アプリケーションがクラッシュしましたそれは0でコンストラクタを見つけることができると言ってとActivityContextを挿入できませんでした。

グラフが正しく設定されていますか?私はApplicationBaseActivityのグラフにモジュールを追加しています。それは十分だと思っていましたが、インクルードは必要ありませんでしたが、私はこれを完全に理解していません。このよう

編集

、短剣はエラーを与えていないが、私は、実行時に、ActivityContextを注入しようとする場合にはnullです。誰もが興味を持っている場合

答えて

4

ソリューション、MyAppModuleから

injects = { 
     MainActivity.class, 
     AddFragment.class, 
     AddMapFragment.class, 
     MyActivity.class, 
     ListFragment.class, 
     MyMapFragment.class, 
     RetainFragment.class, 
     SingleActivity.class, 
     UserActivity.class, 
     UserLoginFragment.class, 
     UserProfileActivity.class, 
     UserProfileFragment.class, 
     UserRegisterFragment.class, 
     WelcomeFragment.class 
} 

を削除し、ActivityModuleにそれを置くことでした。

+0

これは、([Activity Graphs](https://github.com/square/dagger/tree/master/examples/android-activity-graphs)サンプルを使用している場合)アクティビティオブジェクトグラフは、 MyAppModuleを 'addsTo'します。また、あなたがあなたのアクティビティモジュールの 'include'を行っているなら、あなたはアクティビティが生きている時だけであることを望む前に、グラフの一部が構築されていると確信しています。 –

+0

答えとしてそれをチェックしてください – Caipivara

+0

ちょっと@alex、アプリケーションとアクティビティのクラスでどのようにしてグラフを作成しましたか? – bogdan