基本上我正在尝试使用匕首将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" />
答案 0 :(得分:1)
如果您想使用Dagger2
在某处注入某些内容,那么拥有component
至关重要,您还需要一个可以拥有Foo
对象的地方(它本身有Baz
个对象。除此之外,您还应指定dagger2
如何创建对象的方式。在你的情况下,构造函数注入绝对没问题。
我们假设我们的component
是TestComponent
,我们想要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);
}
}