And*_*ega 35 generics dependency-injection dagger
MyClass由于它的通用特性,我无法让这里注入.
Dagger抱怨这个错误:
错误:(187,10)错误:com.test.MyClass有类型参数,不能成员注入原始类型.via:com.test.MyComponent.inject(com.test.MyClass obj)[类型的组件注入方法:com.test.MyClass]
我用谷歌搜索了一下但无法找到这种情况的解决方案.
class MyClass<Type> {
@Inject
UserCredentials userCredentials;
ResultProducer<Type> mRP;
public MyClass(ResultProducer<Type> resultProd) {
mRP = resultProd;
Injector.getComponent().inject(this);
}
public Type getResult() {
if (userCredentials.isLoggedIn()) {
mRP.get();
} else {
mRP.getAnonymousCache();
}
}
}
@Component(modules = CredentialsModule.class )
interface MyComponent {
void inject(MyClass obj);
}
@Module
class CredentialsModule {
@Provides
public UserCredentials provideUserCredentials() {
return new UserCredentials();
}
}
Run Code Online (Sandbox Code Playgroud)
对于许多人来说,了解很有用,它允许将字段注入到通用类中,而无需注入类本身。当注入一个子类时
,它将为您注入。
因此,您可以:
abstract class MyClass<? extends Something> {
@Inject UserCredentials userCredentials;
// you can use it further
}
class AnotherClass extends MyClass<Whatever> {
// just inject this one
}
Run Code Online (Sandbox Code Playgroud)
您可以使用不带“注入”的dagger2。
将方法添加到您的组件:
@Component(modules = CredentialsModule.class )
interface MyComponent {
void inject(MyClass obj);
UserCredentials getUserCredentials();
}
Run Code Online (Sandbox Code Playgroud)
并使用它没有任何问题:
userCredentials=Injector.getComponent().getUserCredentials();
Run Code Online (Sandbox Code Playgroud)
但是,如果您要注入很多字段,这种方法可能会很不方便