2

我有一个使用 Dagger 的 Android 应用程序。整个应用程序的某些部分我想为几个共享公共范围的活动添加范围对象图。以下模块位于根 ObjectGraph 中

@Module(
    injects = {
            MyApplication.class,
    },
    complete = false,
    library = true)
public class BasicContextManagerModule {

    private Context applicationContext;

    public BasicContextManagerModule(Context applicationContext) {
        this.applicationContext = applicationContext;
    }

    @Provides
    Context getApplicationContext() {
        return applicationContext;
    }
}

然后我尝试通过 existingObjectGraph.plus(new FileManagerModule()); 添加以下模块

@Module(
    injects = {
            MyListActivity.class,
            MyFileDetailActivity.class,
            MyFileInfoActivity.class,
    },
    includes = BasicContextManagerModule.class
)
public class FileManagerModule {

    @Provides
    FileManager provideFileManager(Context context) {
        return new FileManager(context);
    }
}

但结果是

java.lang.UnsupportedOperationException: No no-args constructor com.myapp.core.modules.BasicContextManagerModule$$ModuleAdapter

有人可以帮我理解为什么加号不允许这样做吗?我从 dagger 文档中读到 plus 扩展了对象图,您可以拥有包含和添加到模块。但我一直无法做到这一点。

4

1 回答 1

5

includes意味着模块将存在于同一个子图中,如果您不传递实例,Dagger 将实例化它。

addsTo表示引用的模块应该在图中(实际上在父图中),但 Dagger 不会为您提供它。

你想要的是addsTo.

于 2014-08-19T19:43:24.380 回答