标签: dagger

Dagger2允许注入为空

所以,简而言之,我对同一个应用程序有很多口味,但略有不同。我想为所有口味独立添加一个导航器。我使用的是 Dagger2,每种口味都有一个子组件,我只为给定的口味注入东西。所以我也想注入一个 Navigator 类。

诀窍是,公共代码中的某些类也使用此导航器,并进行空检查。因此,如果它为空,那很好,但如果不是,则执行 x。

所以我想要一个像这样的字段:

@Inject @Nullable Navigator navigator;
Run Code Online (Sandbox Code Playgroud)

如果没有类似这样的 @Provides 方法,Dagger 会给我一个错误,但这正是我想要的,我希望 @Provides 进入子模块,但仍然注入公共代码库。

我怎样才能实现这个目标?

java android dependency-injection dagger dagger-2

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

构造函数注入找不到符号方法注入成员

我正在开发一个具有 dagger 依赖项的 Android 应用程序。当通过构造函数注入注入类时,它会抛出一个找不到符号的错误。如果我通过@Provides模块内部定义的方法提供依赖项,则一切正常。

编码:

  public class SixthGenericTest {

        @Inject
        FirstTest firstTest;

        @Inject
        public SixthGenericTest()
        {
            Injection.create().getAppComponent().inject(this);
        }
        public String getData(){
            return firstTest.getTestName();
        }
    }

    @Singleton
    @Component(modules = {FirstModule.class})
    public interface AppComponent {
        void inject(SixthGenericTest sixthGenericTest);

    }
Run Code Online (Sandbox Code Playgroud)

和我得到的错误:

错误:(19, 28) 错误:找不到符号方法injectMembers(MembersInjector,SixthGenericTest)

java android dependency-injection dagger dagger-2

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

如何在运行时使用 dagger.android 从包中注入参数?

我正在努力思考Dagger 2,但遇到了一种情况,我不太确定如何正确解决。我用来dagger.android设置subcomponents每个活动和片段,其中每个子组件都有一个具有自己的依赖项的演示者。

问题是一个片段应该显示从网络获取的信息,因此我将 a 传递URL给片段以告诉它要显示什么。但我不确定如何Dagger解决对片段加载的依赖。我以为我需要一个subcomponent builder,但这显然是多余的,因为编译器消息告诉我它需要来自URL一个Provides方法。我还为 设立了一个限定符,URL并用它注释了片段中的一个方法。我以为Dagger可以捡起来,但我错了。有人可以告诉我如何最好地处理这种情况吗?

android dagger dagger-2

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

如果没有 @Provides 注释方法,则无法提供 Kotlin Dagger ViewModel

我正在尝试将 Dagger 2.15 与我的 Kotlin 项目集成。即使我绑定了 ViewModel,我也遇到了以下编译时异常,

error: [dagger.android.AndroidInjector.inject(T)] java.util.Map<java.lang.Class<? extends android.arch.lifecycle.ViewModel>,? extends javax.inject.Provider<android.arch.lifecycle.ViewModel>> cannot be provided without an @Provides-annotated method.

我的代码: https : //github.com/rramprasad/FoodRecipes

android kotlin dagger dagger-2

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

Android dagger 依赖循环

我有 2 个具有相同作用域的依赖项,它们彼此需要。

我的依赖项是具有不同方法的域服务(每种方法都有不同的业务案例)。一些业务案例可能使用来自另一个领域的方法。

为了做到这一点,我需要 domain1 可用于 domain2,反之亦然。

但是当我这样做时,我得到一个依赖循环编译错误。在谷歌搜索一段时间后,我发现为了克服这个问题,我必须使用 @Inject 注释而不是 @Module 中的构造函数参数注入依赖项之一。

当我尝试这个代码编译但匕首根本没有注入第二个依赖项。

有没有办法用 Dagger 实现我想要的?

android dependency-injection cycle dagger

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

如何使用 koin 依赖库在模块中注入活动上下文

我有一个 Util 模块,如下所示,它需要活动上下文 [不是应用程序上下文] 来完成它的一些功能。

如何将活动上下文注入其中?

class MainPresenter internal constructor(private val iMainActivity: IActivity)  : IPresenter {

    //dependencies
    private val context = iMainActivity as AppCompatActivity

    private var util = UtilModule(context)         //<-- inject this
    private var httpClient = HttpClient(context)   //<-- inject this
Run Code Online (Sandbox Code Playgroud)

android dependency-injection dagger koin

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

Dagger 不允许我在一个类中使用两个相同类型的对象

我有一个AppModule包含三个函数的类:

@Singleton
@Provides
static FirebaseFirestore provideFirebaseFirestore() {
    return FirebaseFirestore.getInstance();
}

@Singleton
@Provides
static CollectionReference provideUsersCollRef(FirebaseFirestore db) {
    return db.collection("users");
}

@Singleton
@Provides
static CollectionReference provideBarsCollRef(FirebaseFirestore db) {
    return db.collection("bars");
}
Run Code Online (Sandbox Code Playgroud)

我读过我可以使用某种命名,但我没有找到任何方法来解决这个问题。除此之外,我如何在片段代码中区分我注入的是哪一个引用?提前致谢。


编辑:

@Inject
@Named("bars")
BarsDataSource(CollectionReference barsRef) {
    this.barsRef= barsRef;
}
Run Code Online (Sandbox Code Playgroud)

android dependency-injection dagger dagger-2

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

如何使用 dagger 限定符注释来提供不同的 OkHttpClient 构建器?

我正在尝试使用 dagger 限定符在我的 android 应用程序中提供不同类型的 OkHttpClient.Builder 。例如,我有两个注释,即 @Authorized 和 @WithTime,每个注释都应该向客户端构建器添加一些拦截器。

我希望能够通过注释提供方法来获得不同的构建器(添加不同的拦截器)。但当我有多个注释时,我不知道如何去做。

这就是我之前在只需要一个注释(@Authorized)时所做的事情。但现在我可能需要更多类型的客户,这是不可能的。

@Provides
@Singleton
@Authorized
OkHttpClient.Builder provideOkHttpClientBuilderWithAuthorization(...)
Run Code Online (Sandbox Code Playgroud)
@Provides
@Singleton
OkHttpClient.Builder provideOkHttpClientBuilder(...)
Run Code Online (Sandbox Code Playgroud)

java android dependency-injection dagger retrofit

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

通过刀柄中的不同具体类绑定接口?

我使用刀柄。我有一个接口,但我有两个实现它们的类。我需要在 ViewModels 中实现不同的 @Bind 接口。请帮帮我?创建自定义组件?或使用自定义范围?

android dagger dagger-hilt

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

Compose with Hilt last version (2.35) 问题:无法找到方法

我正在尝试在 Android Canary 上使用 Compose 和 Hilt(最新版本),但我无法同步该项目。错误信息如下:

Unable to find method ''void com.android.build.api.extension.AndroidComponentsExtension$DefaultImpls.androidTests$default(com.android.build.api.extension.AndroidComponentsExtension, com.android.build.api.extension.VariantSelector, kotlin.jvm.functions.Function1, int, java.lang.Object)''
'void com.android.build.api.extension.AndroidComponentsExtension$DefaultImpls.androidTests$default(com.android.build.api.extension.AndroidComponentsExtension, com.android.build.api.extension.VariantSelector, kotlin.jvm.functions.Function1, int, java.lang.Object)'

Run Code Online (Sandbox Code Playgroud)

我的 build.gradle

ext {
        compose_version = '1.0.0-beta01'
    }
    repositories {
        google()
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:7.1.0-alpha01'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.30"
        def hilt_version = "2.35"
        classpath "com.google.dagger:hilt-android-gradle-plugin:$hilt_version"
    }
Run Code Online (Sandbox Code Playgroud)

我的 build.gradle(:app)

    //Dagger - Hilt
    def hilt_version = "2.35"
    implementation "com.google.dagger:hilt-android:$hilt_version"
    kapt "com.google.dagger:hilt-android-compiler:$hilt_version"
    implementation "androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha03"
    kapt "androidx.hilt:hilt-compiler:1.0.0"
    implementation 'androidx.hilt:hilt-navigation-compose:1.0.0-alpha02'
Run Code Online (Sandbox Code Playgroud)

android kotlin dagger dagger-hilt

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