如何将没有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构造函数的模块所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)