我看不到Dagger对生命周期管理的任何支持。只有DI,@PostConstruct或@PreDestroy没有。我希望Dagger以与Spring相同的方式启动/停止对象是图形。我该怎么做? 最佳答案 图中对象的生命周期与图本身的生命周期相同。一旦图形被垃圾收集,图形中的所有对象也会被垃圾收集。我通过在Dagger中创建子图来实现这一点。子图将包含所有需要较短生命周期的对象(该图中的单例)。应用程序范围的对象位于子图所依赖的主图中。附言。我不熟悉Spring,所以我无法解释这与Spring有何关系。
我有一个使用vanillaGuice的基于Guice的项目;没有Assisted-Inject,没有AOP,没有扩展Guice的额外插件,等等。为了在Android上更轻松地运行它,Dagger似乎是一个更好的解决方案。每个类都有一个依赖项和一个带有@Inject注释的构造函数。没有使用字段或方法注入(inject)。这些模块非常简单(使Guice变得矫枉过正)并且主要包含如下绑定(bind):classSomethingModuleextendsAbstractModule{protectedvoidconfigure(){Bind(Handler.class).annotatedW
是否可以选择性地在dagger2中注入(inject)一个值?特别是,我想做这样的事情。@InjectA(Optionalb){this.b=b;}如果B在模块中未定义,我希望dagger提供一个Optional.empty(),如果它已定义则提供Optional.of(value).这是可行的还是我需要一个定义这些可选值的模块? 最佳答案 可选注入(inject)需要一个模块来将可选绑定(bind)添加到您的组件,因为Dagger需要依赖图上的每个依赖项,即使是显式缺失的依赖项。当你想用一个实现来实现这个可选时,你将向一个组件添加
我已经使用Eclipse创建了一个Java应用程序,并且我正在使用Maven进行包管理。几天前,我能够配置我的应用程序以使用Dagger1(将依赖项添加到pom文件,启用注释处理并将dagger、dagger-compile、javax和javawriterjar添加到工厂路径)。在与我的同事多次讨论后,我们决定使用Dagger2。我尝试按照Dagger2documentation将Dagger1实现迁移到Dagger2。,但它没有用。由于某些无法解释的原因,没有生成带有Dagger前缀的@Component类。因此我决定尝试Dagger2Coffeesample.我创建了一个新的Ec
在模块内部,如果我需要根据模块构造时已知的变量提供接口(interface)的不同实现,我可以将逻辑放在该接口(interface)类型的@Provides方法中。像这样:@ModulepublicclassFooModule{privatefinalStatestate;publicFooModule(Statestate){this.state=state;}@ProvidesFooInterfaceprovideFooImplementation(){switch(state){caseSTATE_1:returnnewFooImpl1();caseSTATE_2:returnn
Dagger被宣传为“适用于Android和Java的快速依赖注入(inject)器”。但是我无法在没有Gradle'android'插件的情况下运行它。compile'com.squareup.dagger:dagger:1.2.1'provided'com.squareup.dagger:dagger-compiler:1.2.1'我正在使用的“java”或“应用程序”gradle插件中没有provided。它甚至在thisbugreport中提到.同时“编译”它不会产生任何结果。同样的java.lang.IllegalStateException:Moduleadapterfor
在非Android应用(IDE是IntelliJIDEA)中,我完全厌倦了Dagger2。build.gradlebuildscript{repositories{maven{url"https://plugins.gradle.org/m2/"}}dependencies{classpath"net.ltgt.gradle:gradle-apt-plugin:0.9"}}applyplugin:'java'applyplugin:'net.ltgt.apt'dependencies{compile'com.google.dagger:dagger:2.8'apt'com.google
如何使用Dagger创建自定义作用域?有指导方针吗?我没有找到它们。我正在开发一个Vaadin应用程序,需要一个自定义范围。类似UiScoped的东西。最好的问候 最佳答案 Dagger不使用与Guice相同的机制来处理作用域。具体来说,Dagger不像Guice那样透明地处理作用域,在幕后使用各种作用域注释、一个注入(inject)器和不同的实例缓存。相反,它使用两个原则。首先,@Singleton的意思是“每个图一个”(JSR-330的最严格解释),其次,图可以在层次结构中链接。Dagger使用这种分层链接图树,您可以通过添加更
我有一个模块来提供改装接口。@ModuleclassNetModule(valbase:String){@Provides@SingletonfunprovideOkHttpClient():OkHttpClient{returnOkHttpClient.Builder().addInterceptor(object:Interceptor{overridefunintercept(chain:Interceptor.Chain):Response{valrequest=chain.request()info("Requestfor${request.url()}")returnchain.p
这个问题在这里已经有了答案:WhatisaNullPointerException,andhowdoIfixit?(12个答案)关闭5年前。我在注入(inject)首选项时出错:无法找出问题。以下是我正在使用的一些类(class):AppModule类@ModulepublicclassAppModule{privatefinalMyApplicationapp;publicAppModule(MyApplicationapp){this.app=app;}@Provides@SingletonpublicContextprovideContext(){returnapp;}@Prov