Dagger 2 依赖注入不起作用

Aur*_*ere 0 java android dependency-injection dagger-2

我对 Dagger 2 非常陌生,我正在尝试通过一些小的修改来使这个基本示例工作。

这是我到目前为止:

组件类

@Component(modules = {MyModule.class})
public interface MyComponent {
void inject(Object object);
} 
Run Code Online (Sandbox Code Playgroud)

模块类

@Module
public class MyModule {

@Provides
@Singleton
public Retrofit getRetrofit(){
  return new Retrofit();
}
}
Run Code Online (Sandbox Code Playgroud)

静态注入器

public class MyStaticInjector {

private static MyComponent di;

public static void inject(Object object){
    if(di == null){
        di = DaggerMyComponent.builder().build();
    }
    di.inject(object);
}
}
Run Code Online (Sandbox Code Playgroud)

问题是每当我这样做

MyStaticInjector.inject(this);
Run Code Online (Sandbox Code Playgroud)

带注释的字段仍然为空。我怀疑问题出在接口方法中的类型 Object 上。在这个例子中,有一个 Activity 代替。但是我需要在不是活动的类中使用 DI。

谁能帮我?谢谢你。

Dav*_*jak 5

Object没有带@Inject注释的字段。因此注入工作得很好——它只是没有什么可注入的。
您将不得不使用您的实际类inject(MyClass)而不是Object,以便可以生成代码并可以注入字段。

Dagger 在编译时生成源代码。如果它不知道实际的类,它就不能为它创建代码。

  • 具体请参见 https://google.github.io/dagger/api/latest/dagger/Component.html 中的“关于协方差的说明” (2认同)