Android Dagger-没有no-args构造函数的模块

Android Dagger-没有no-args构造函数的模块,第1张

概述如何将没有no-args构造函数模块组合在一起.我有一个包含多个模块的库,我想在我的应用程序中重用它们.但是,这些模块需要一些参数.以下示例描述了我的设置:图书馆:@Module(library=true)publicclassLibModule1{privatefinalStringmString;publicLibM

如何将没有no-args构造函数的模块组合在一起.我有一个包含多个模块的库,我想在我的应用程序中重用它们.但是,这些模块需要一些参数.以下示例描述了我的设置:

图书馆:

@Module(    library = true)public class libmodule1 {    private final String mString;    public libmodule1(String string) {        mString = string;    }    //... provIDe methods }@Module(    library = true,    addsTo = libraryModule1.class)public class libmodule2 {    private final String mString;    public libmodule2(String string) {        mString = string;    }    //... provIDe methods }

注意,libmodule2依赖于libmodule1中提供的一些对象.

应用程式:
在我的应用程序中,我将libmodule1和libmodule2中的对象注入到一个类中.但是我不知道如何组合这些模块. include参数不起作用,因为两个模块都没有no-args构造函数. addTo无效,因为我需要两个库模块,但是参数让我们仅设置一个类.创建两个注入我的类MyClass.class的应用程序模块不起作用(一个类只能由一个模块注入,对吗?!).

@Module(    injects = MyClass.class)public class AppModule {}

我该如何解决这个问题?

解决方法:

您完全可以将模块的实时实例传递给ObjectGraph.create()和graph.plus().如果您有状态模块,则应执行以下 *** 作:

ObjectGraph graph =     ObjectGraph.create(new libraryModule1("foo"), libraryModule2("bar));

就是说,如果您以这种方式实例化在问题中描述的库模块,它们将在编译时仍然失败,因为除非您彼此包括(或标记为complete-false),否则它们将失败.您可以简单地让libmodule2包含libmodule1,因为您说它具有依赖于后者提供的对象的对象.

@Module(library = true)public class libmodule1 {  private final String mString;  public libmodule1(String string) {    mString = string;  }  //... provIDe methods }@Module(includes = libraryModule1.class)public class libmodule2 {  private final String mString;  public libmodule2(String string) {    mString = string;  }  //... provIDe methods }

我建议您在问题中描述的场景中不要使用complete = false,因此您最终不会避免进行图分析.仅在创建可重用的模块时才应使用complete = false,该模块期望图形状态不能直接通过另一个模块包含,因为它将与在编译时身份未知的模块结合在一起.

如果计划在libmodule1的替代方案中使用libmodule2,则只应执行此处的 *** 作.在上述情况下,没有特别的理由不包括libmodule2中的libmodule1.

complete = false模块从所有图分析中排除,因为它们没有断言其完整性.但是,如果给出了包含,则这两个模块都可以完整.但是您必须将这些模块作为实例传递,因为它们没有no-args构造函数.

您应该只使用library = true来指示提供的某些绑定是供其他依赖项使用的,而不是通过graph.get(Foo.class)作为图的入口点获得的.本质上,库= true模块从孤立绑定分析中排除.

总结

以上是内存溢出为你收集整理的Android Dagger-没有no-args构造函数的模块全部内容,希望文章能够帮你解决Android Dagger-没有no-args构造函数的模块所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1077084.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存