如何覆盖Dagger2不同范围内的依赖项?示例:我的应用程序中有两个组件:ApplicationComponent和ActivityComponent。ApplicationComponent是基础组件,ActivityComponent是我要执行覆盖的作用域组件。对于这个例子,我创建了那些模型:publicclassParrot{privatefinalHelloPrinterhelloPrinter;publicParrot(HelloPrinterhelloPrinter){this.helloPrinter=helloPrinter;}publicvoidsayHello(){
我有一个严重依赖注入(inject)(dagger2)的应用程序。我想运行一个espresso测试,而不是让测试在整个应用程序中导航,然后登录到应用程序。我想开始我的teleActivity,并模拟登录管理器。但是在任何@test函数中,我们已经在调用onCreate时命中了空指针。如果我在启动Activity(如下所示)之前覆盖它,则该Activity为空。据我了解,切换下划线依赖项的能力是我们使用Dagger2的一个重要原因,否则它只是一个过度设计的单例。我如何覆盖、模拟或将注入(inject)切换到测试Dagger模块——这样我就可以创建这个简单的espresso测试。请注意,如
我正在尝试了解Dagger的@Reusable范围的使用。从文档中我可以理解的是,如果提供者的范围是@Singleton或任何其他自定义范围,那么将首先创建对象,然后在组件的整个生命周期内缓存该对象。因此,对于不需要总是相同实例或不常使用的对象,这种方法最终会浪费内存。但如果我们选择一个无作用域的提供者,每次它都会创建一个新实例,并且由于对象实例化非常昂贵,尤其是在Android等环境中,分配可能很昂贵,这可能会导致性能问题。@Reusable作用域介于No-scope和Scoped实例之间。来自文档Sometimesyouwanttolimitthenumberoftimesan@I
引起:java.lang.IllegalStateException:必须设置analyticsModule我正在构建一个使用模板式初始化的库。用户可以使用该库有选择地为项目设置模块。它使用Dagger2进行DI。但是Dagger2似乎不允许可选模块。不能简单地忽略未设置的模块吗? 最佳答案 您可能需要考虑使用多重绑定(bind),它允许用户有选择地将依赖项添加到Set中或Map.这是一个例子:interfacePlugin{voidinstall(Applicationapplication);}@Component({Modul
同时添加Dagger2时和AndroidDataBinding对于我的项目,我遇到了一些以下构建时错误。这似乎是一个已知问题(请参阅[1]或[2]),因为我得到了完全相同的错误。不幸的是我无法解决它们(像其他人一样)。有人可以使用当前版本的Dagger2和数据绑定(bind)进行完整的工作设置,并且可以提供帮助吗?这里是错误:C:\Users\Kai\AndroidStudioProjects\WearCompass\mobile\src\main\java\com\comparilla\wearcompass\ui\navigation\InfoPanelFragment.java:
我正在尝试使用Dagger2将我的用户对象存储为单例。@Provides@Named("me")@SingletonUserprovideUser(PrefsUtilprefsUtil,UserDaouserDao){intid=prefsUtil.getFromPrefs("me",0);if(id==0){returnnewUser();}try{returnuserDao.queryForId(id);}catch(SQLExceptione){returnnewUser();}}它工作正常并用User对象注入(inject)我的类。但是,登录并从服务器获取用户并将其存储在上述方
我正在尝试使用Dagger2集成Retrofit2和AndroidPriorityJobQueue。很可能我在这里使用了错误的模式(我是Java和Android的新手),但我正在尝试从一个将被序列化然后在执行前反序列化的对象访问Dagger创建的Retrofit实例(Android作业队列序列化持久保存到磁盘的作业)。Retrofit实例由ApplicationDagger组件创建,因为我在其依赖项之一中使用了SharedPreferences。我无法在创建作业时将Retrofit传递给作业,因为Retrofit本身无法序列化。应用程序也无法序列化,因此我无法在作业运行时从作业中引用A
我正在构建一个具有某些功能的应用程序:ContentProvider、SyncAdapter、作业服务和相关的持久性逻辑。在这些之上是带有UI的Activity。我试图将所有上述功能放在一个单独的库模块中,因为理论上它们的逻辑是独立的,并且可以被任何应用程序重用。现在是Dagger2。我的库的依赖关系图的第一个节点(主组件)确实需要提供上下文,并且这个上下文必须从应用程序中注入(inject),因为库范围具有与应用程序相同的生命周期。显然,为了自包含,我的库不应该直接使用我的Application类。这些是我想到的可能性:在我的应用程序中构建库的主要组件,并按照建议将其存储在全局静态类
我在Android应用程序中使用Dagger。它在应用程序中工作,但当我运行仪器测试时,我收到NoClassDefFoundError。我正在使用Gradle和Espresso。这是在没有progaurd的情况下发生的。这很奇怪,因为加载了“Module$$ModuleAdapter”,但没有加载“Module$$ModuleAdapter$EndpointProvidesAdapter”。我将APK从设备上拉回并使用dexdump验证类确实在APK中,“Module$$ModuleAdapter$EndpointProvidesAdapter”。关于可能导致此问题的任何想法?java
当使用Dagger时,哪些方法将允许在对象上免费/轻松地实例化@Inject字段,这些对象也通过注入(inject)实例化。例如,下面的代码会将Bar类型的对象注入(inject)到给定的Foo对象中。它将以显示的两种方式之一执行此操作。但是,每个Bar对象的Sly字段与该行为不匹配。滚publicclassFoo{@InjectBarbar;publicStringgetValue(){return"Foo'sbarvalue:"+bar.getValue();}}砰publicclassBar{@InjectSlysly;publicStringgetValue(){return"