2013-06-07 14 views
5

Tôi có một ứng dụng Android và tôi đang cố gắng sử dụng dao găm. Tôi quyết định sử dụng biểu đồ toàn cầu + biểu đồ hoạt động. Tôi có ba mô-đun:Đồ thị hoạt động Dagger và các mô-đun riêng biệt

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

@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); 
    } 
} 

tôi đã phải sử dụng bao gồm trên MyAppModule cho ActivityModule, mà không có nó, ứng dụng bị rơi nói rằng nó có thể tìm thấy một hàm tạo trên Context và không thể tiêm số Context của Activity.

Biểu đồ có được định cấu hình chính xác không? Tôi đang thêm các mô-đun vào biểu đồ trong các Application và trong một BaseActivity và tôi nghĩ rằng nó là đủ và tôi không cần bao gồm, nhưng tôi không chắc tôi hoàn toàn hiểu được quá trình cấu hình này.

Sửa

Như thế này, dao găm mang đến cho không có lỗi nhưng nếu tôi cố gắng tiêm một ActivityContext, khi chạy nó null.

Trả lời

4

Các giải pháp, nếu có ai quan tâm, là để loại bỏ

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 
} 

từ MyAppModule và đặt nó trong ActivityModule.

+0

Đó là vì (nếu bạn đang sử dụng biểu đồ [Đồ thị hoạt động] (https://github.com/square/dagger/tree/master/examples/android-activity-graphs)) biểu đồ đối tượng hoạt động của bạn là thứ 'addTo' MyAppModule. Ngoài ra, nếu bạn đang làm 'include' của mô-đun hoạt động của bạn, tôi chắc chắn rằng một phần của đồ thị được xây dựng trước khi bạn muốn nó được, đó là khi Activity chỉ còn sống. –

+0

Vì vậy, hãy kiểm tra nó như là một câu trả lời – Caipivara

+0

Hey @alex, bạn có thể vui lòng đặt ở đây chính xác bạn đã tạo ra các đồ thị trong các lớp Ứng dụng và Hoạt động không? – bogdan

Các vấn đề liên quan