标签: dagger

多次注射匕首

是否有可能在dagger中获取接口/类的实现列表?

我正在寻找像Ninject的Multi-Injection这样东西.

android dependency-injection dagger

2
推荐指数
1
解决办法
1520
查看次数

无法加载类java.util.Arrays $ ArrayList的模块适配器.请确保为此模块运行代码生成

我试图在没有Maven的情况下使用Dagger(仅使用ADT Eclipse)并遇到了这个问题.我尝试在注释处理选项中添加jar,并使用java writer 2.2.1,因为我从Dclipse中学到的示例通过eclipse构建失败,并且"请确保为此模块运行代码生成".但它仍然无效.

任何人都可以指出我做错了什么?

android dagger

2
推荐指数
1
解决办法
825
查看次数

Dagger ObjectGraph plus()包含根模块中模块的模块不断返回No no-args构造函数

我有一个使用Dagger的Android应用.整个应用程序的某些部分我想为几个共享共同范围的活动添加范围的ObjectGraphs.以下模块位于根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;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我尝试通过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);
    }
}
Run Code Online (Sandbox Code Playgroud)

但结果是

java.lang.UnsupportedOperationException: No no-args constructor com.myapp.core.modules.BasicContextManagerModule$$ModuleAdapter
Run Code Online (Sandbox Code Playgroud)

有人可以帮助我理解为什么加号不会允许这个?我从匕首文档中读到,扩展了对象图,你可以使用includes和addsTo Modules.但我无法做到这一点.

android dependency-injection include square dagger

2
推荐指数
1
解决办法
918
查看次数

如何像在 Spring 中那样在 Dagger 中注入列表或集合?

一切都在问题中。例如,对于包含 String 列表的 Foo 类:

public class Foo {

 private List<String> fooList;

 //getter and setter

}
Run Code Online (Sandbox Code Playgroud)

在 XML 中,我们可以执行以下操作:

<bean id="foo" class="Foo">
  <property name="fooList">
     <list>
        <value>bar</value>
        <value>baz</value>           
    </list>
</property>
Run Code Online (Sandbox Code Playgroud)

java dependency-injection dagger

2
推荐指数
1
解决办法
4453
查看次数

我可以使用某种辅助的Inject with Dagger吗?

使用Google Guice或Gin我可以指定参数不受依赖注入框架控制:

class SomeEditor {


  @Inject
  public SomeEditor(SomeClassA a, @Assisted("stage") SomeClassB b) {
  }

}
Run Code Online (Sandbox Code Playgroud)

辅助参数stageSomeEditor创建实例时指定.

SomeClassA的实例取自对象图,SomeClassB的实例在运行时从调用者获取.

在Dagger中有类似的方法吗?

java gwt-gin guice dagger dagger-2

2
推荐指数
1
解决办法
1183
查看次数

Dagger 2 - 将FragmentManager传递给构造函数

我正在研究Dagger 2库并遇到了传递参数的问题,这些参数无法从"extends Application"类中获得.

例如,我需要传递FragmentManagerViewPager适配器构造函数.你会怎么做?

我的应用程序:

public class MyApplication extends Application {

private MyAppComponent mMyAppComponent;

@Override
public void onCreate() {
    super.onCreate();

    Context context = getApplicationContext();

    mMyAppComponent= DaggerMyAppComponent.builder()
            .utilityModule(new UtilityModule())
            .locationModule(new LocationModule(context))
            .appModule(new AppModule(context))
            .pagerAdapterModule(new PagerAdapterModule(context)) //this one is problematic
            .build();
}

public MyAppComponent getmMyAppComponent() {
    return mMyAppComponent;
    }
}
Run Code Online (Sandbox Code Playgroud)

MyAppComponent:

@Singleton
@Component(
    modules = {
            UtilityModule.class,
            LocationModule.class,
            PagerAdapterModule.class,
            AppModule.class
    }
Run Code Online (Sandbox Code Playgroud)

)

public interface MyComponent {
    FragmentManager fragmentManager(); //is it right?

    public void inject(NavigationActivity navigationActivity);
} …
Run Code Online (Sandbox Code Playgroud)

android dependency-injection dagger dagger-2

2
推荐指数
1
解决办法
2311
查看次数

Android Dagger 2无法解析符号构建器()

我在Android Studio中使用Dagger 2,但是当尝试通过DaggerMyComponent.builder().myModule(new MyModule()).build()创建Component时,我总是看到红色的" builder() " 这个词,它说"无法解析符号构建器".

我必须说我已经多次清理和构建了项目,甚至评论了组件实例并在重建后对其进行了解除.我还必须说我可以检查DaggerMyComponent.class,一切似乎都没问题,事实上,我可以毫无问题地导入该类.

该示例在GithHub上共享,链接如下:

https://github.com/alessandroargentieri/LetsDagger2Together

我有两个类:BClass和AClass,它取决于第一个.我有ABModule.class,它是工厂方法,ABComponent是组件接口.DaggerABComponent创建到WholeApplication.class中,扩展了Application.

package mawashi.alex.letsdagger2together.Application;

import android.app.Application;
import mawashi.alex.letsdagger2together.DaggerClasses.ABComponent;
import mawashi.alex.letsdagger2together.DaggerClasses.ABModule;
import mawashi.alex.letsdagger2together.DaggerClasses.DaggerABComponent;

public class WholeApplication extends Application {
    static ABComponent component;

    @Override
    public void onCreate() {
        super.onCreate();
        //here is where builder() is not recognized
        component = new DaggerABComponent.builder().aBModule(new ABModule()).build();

    }

    public static ABComponent getComponent(){
        return component;
    }
}
Run Code Online (Sandbox Code Playgroud)

模块:

package mawashi.alex.letsdagger2together.DaggerClasses;

import dagger.Module;
import dagger.Provides;
import mawashi.alex.letsdagger2together.Model.AClass;
import mawashi.alex.letsdagger2together.Model.BClass;

@Module
public class ABModule {

    @Provides
    public BClass …
Run Code Online (Sandbox Code Playgroud)

android dagger dagger-2

2
推荐指数
1
解决办法
1572
查看次数

Dagger2不生成Dagger*类

正如标题所说,Dagger2没有生成Dagger*前缀类.我在这里看了一些其他类似的帖子,但似乎没有任何效果.

我克隆此回购https://github.com/ecgreb/mvpc,已失效Android Studio中的缓存和重新启动它,我删除$Project/.gradle$Home/.gradle/caches,清洗和重建项目,但仍不能工作.

在使用Dagger2的一些项目中也发生了这种情况

我错过了什么吗?

apply plugin: 'com.android.application'
apply plugin: 'com.neenbedankt.android-apt'

android {
  compileSdkVersion 24
  buildToolsVersion "24.0.3"

  defaultConfig {
    applicationId "com.example.ecgreb.mvpc"
    minSdkVersion 15
    targetSdkVersion 24
    versionCode 1
    versionName "1.0"
  }
  buildTypes {
    release {
      minifyEnabled false
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
  }
}

tasks.withType(Test) {
  testLogging {
    exceptionFormat "full"
    events "started", "skipped", "passed", "failed"
    showStandardStreams true
  }
}

repositories {
  mavenCentral()
}

dependencies {
  compile 'com.android.support:appcompat-v7:24.2.1'
  compile 'com.android.support:design:24.2.1'

  compile "com.google.dagger:dagger:2.7"
  annotationProcessor "com.google.dagger:dagger-compiler:2.7"
  provided 'javax.annotation:jsr250-api:1.0'

  testCompile …
Run Code Online (Sandbox Code Playgroud)

android dagger dagger-2

2
推荐指数
1
解决办法
5200
查看次数

Android Dagger 2使用Kotlin,奇怪的错误

这是我,我尝试了我之前的帖子中的建议,将Kotlin用于整个项目.

当用gradle构建时我没有错误,但是当我尝试编译我得到的项目时.我试图在网上搜索一些答案,但无法找到任何东西.任何人都知道它可能是什么?

> e: [kapt] An exception occurred: java.lang.NoClassDefFoundError:
> com/google/auto/common/MoreTypes  at
> dagger.model.Key$Builder.type(Key.java:111)   at
> dagger.model.Key.builder(Key.java:102)    at
> dagger.internal.codegen.KeyFactory.forInjectConstructorWithResolvedType(KeyFactory.java:253)
>   at
> dagger.internal.codegen.InjectBindingRegistryImpl.tryRegisterMembersInjectedType(InjectBindingRegistryImpl.java:266)
>   at
> dagger.internal.codegen.InjectBindingRegistryImpl.tryRegisterMembersInjectedType(InjectBindingRegistryImpl.java:257)
>   at
> dagger.internal.codegen.InjectProcessingStep$1.visitVariableAsField(InjectProcessingStep.java:69)
>   at
> dagger.internal.codegen.InjectProcessingStep$1.visitVariableAsField(InjectProcessingStep.java:59)
>   at
> javax.lang.model.util.ElementKindVisitor6.visitVariable(ElementKindVisitor6.java:229)
>   at com.sun.tools.javac.code.Symbol$VarSymbol.accept(Symbol.java:1237)
>   at
> dagger.internal.codegen.InjectProcessingStep.process(InjectProcessingStep.java:58)
>   at
> dagger.shaded.auto.common.BasicAnnotationProcessor.process(BasicAnnotationProcessor.java:330)
>   at
> dagger.shaded.auto.common.BasicAnnotationProcessor.process(BasicAnnotationProcessor.java:181)
>   at
> org.jetbrains.kotlin.kapt3.ProcessorWrapper.process(annotationProcessing.kt:133)
>   at
> com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:794)
>   at
> com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:705)
>   at
> com.sun.tools.javac.processing.JavacProcessingEnvironment.access$1800(JavacProcessingEnvironment.java:91)
>   at
> com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1035)
>   at
> com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1176)
> …
Run Code Online (Sandbox Code Playgroud)

android kotlin dagger dagger-2

2
推荐指数
1
解决办法
1063
查看次数

匕首2:如何对片段使用注入

AndroidInjection.inject(this)用来将组件注入活动中。

AndroidInjection也有一个android.app.Fragment以参数为重载的方法。但是我的片段扩展了android.support.v4.app.Fragment,没有相应的方法。

问题:如果碎片延伸,如何使用注射android.support.v4.app.Fragment

java android android-fragments dagger dagger-2

2
推荐指数
1
解决办法
4956
查看次数