gpt4 book ai didi

java - 可选注入(inject) Dagger 2

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:16:25 24 4
gpt4 key购买 nike

是否可以选择性地在 dagger 2 中注入(inject)一个值?特别是,我想做这样的事情。

@Inject A(Optional<B> b) {
this.b = b;
}

如果 B 在模块中未定义,我希望 dagger 提供一个 Optional.empty(),如果它已定义则提供 Optional.of(value) .

这是可行的还是我需要一个定义这些可选值的模块?

最佳答案

可选注入(inject)需要一个模块来将可选绑定(bind)添加到您的组件,因为 Dagger 需要依赖图上的每个依赖项,即使是显式缺失的依赖项。当你想用一个实现来实现这个可选时,你将向一个组件添加一个 impl 绑定(bind)模块,通常是一个子组件,它想要实现它。

以下是模块的外观:

@Module
public interface OptionalModule {
@BindsOptionalOf
Foo bindOptionalFoo();
}

@Module
public interface ImplModule {
@Binds
Foo bindFooImpl(FooImpl foo);
}

然后你可以构造函数或成员注入(inject)Optional

public class Bar {
@Inject
public Bar(Optional<Foo> optionalFoo) {}
}

public class Bar {
@Inject
public Optional<Foo> optionalFoo;
}

关于java - 可选注入(inject) Dagger 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39175576/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com