Android Dagger2字段未注入

时间:2018-01-08 13:21:54

标签: java android dependency-injection dagger-2

基本上我正在尝试使用匕首将Foo字段注入类public class Baz { } ,它就像这样

Baz.java

public class Foo {
   @Inject Baz baz;
}

Foo.java

baz

但是当我运行它时,没有任何内容被注入且Baz仍然为空,我甚至尝试将constructor@Inject写为app.gradle并使用implementation 'com.google.dagger:dagger:2.14.1' annotationProcessor 'com.google.dagger:dagger-compiler:2.14.1' 进行注释,但它没有&# 39;无论如何工作

匕首是如何工作的,它能够看到我所有的类,所以当我请求一个类实例时,他可以创建一个,或者我错过了一些注释,甚至更糟糕的是我的注释处理器无法正常工作。我将这些依赖项添加到我的@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final EditText edit=(EditText)findViewById(R.id.edit); edit.setInputType(InputType.TYPE_NULL); edit.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { edit.setCursorVisible(true); return false; } }); }

<EditText
    android:layout_width="wrap_content"
    android:id="@+id/edit"
    android:layout_height="wrap_content"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

1 个答案:

答案 0 :(得分:1)

如果您想使用Dagger2在某处注入某些内容,那么拥有component至关重要,您还需要一个可以拥有Foo对象的地方(它本身有Baz个对象。除此之外,您还应指定dagger2如何创建对象的方式。在你的情况下,构造函数注入绝对没问题。

我们假设我们的componentTestComponent,我们想要Foo对象的地方是MainActivity,那么代码就是像这样的东西:

Baz.java

public class Baz {

    @Inject
    public Baz() {
    }
}

Foo.java

public class Foo {

    @Inject
    Baz baz;

    @Inject
    public Foo() {
    }
}

TestComponent.java

@Component
public interface TestComponent {

    void inject(MainActivity injector);
}

(当您创建component时,重建项目)

MainActivity.java

public class MainActivity extends AppCompatActivity {

    @Inject
    Foo foo;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        DaggerTestComponent.builder().build().inject(this);
    }
}