我对Dagger 2非常陌生,我试图让this基本示例进行一些小修改。
这是我到目前为止所做的:
组件类
@Component(modules = {MyModule.class})
public interface MyComponent {
void inject(Object object);
}
模块类
@Module
public class MyModule {
@Provides
@Singleton
public Retrofit getRetrofit(){
return new Retrofit();
}
}
静态注射器
public class MyStaticInjector {
private static MyComponent di;
public static void inject(Object object){
if(di == null){
di = DaggerMyComponent.builder().build();
}
di.inject(object);
}
}
问题是每当我做
MyStaticInjector.inject(this);
带注释的字段仍为空。我怀疑问题在于接口方法中的Object类型。在示例中,有一个Activity而不是。但是我需要在不是活动的类中使用DI。
任何人都可以帮助我吗?谢谢。
答案 0 :(得分:3)
@Inject
没有inject(MyClass)
个带注释的字段。因此注射效果很好 - 它没有什么可注射的
您必须使用Object
代替{{1}}的实际类,以便生成代码并注入字段。
Dagger在编译时生成源代码。如果它不知道实际的类,它就无法为它创建代码。