我如何注入这个构造函数:
class SomeClass @Inject constructor(
dep: Dependency,
context: Context,
private val otherClass: OtherClass = OtherClass()
)
我只提供依赖性和Context
......但它表示无法提供OtherClass
。它应该需要这个类,因为它有一个默认值......我怎样才能使它工作?
答案 0 :(得分:1)
我认为最简单的方法是注入OtherClass
:
class OtherClass @Inject constructor()
你也可以使用@Named
注释来区别于默认实现和自定义OtherClass
(但我认为你应该在模块中注入两个以避免混淆):
//编辑:参见以下示例
public static class Pojo {
final String string;
Pojo(String string) {
this.string = string;
}
@Override
public String toString() {
return string;
}
}
@Provides
@Named("custom")
String provideCustomString() {
return "custom";
}
@Provides
String provideDefaultString() {
return "default";
}
@Provides
@Named("custom")
Pojo providesCustomPojo(@Named("custom") String custom) {
return new Pojo(custom);
}
@Provides
Pojo providesDefaultPojo(String defaultString) {
return new Pojo(defaultString);
}
为了注入自定义put @Inject @Named("custom")
注释
(对不起java)
答案 1 :(得分:0)
由于Dagger是用Java实现的,因此在生成代码时它无法使用构造函数的默认值。如果您仍想利用该默认值,则唯一的选择是在一个Dagger模块中为@Provides
创建一个带有SomeClass
注释的函数。
@Provides
fun provideSomeClass(dep: Dependency, context: Context): SomeClass =
SomeClass(dep, context)