kotlin
依赖
implementation 'com.google.dagger:dagger:2.17'
//kotlin使用kapt
kapt 'com.google.dagger:dagger-compiler:2.17'
class Person @Inject
constructor() {
lateinit var name: String
}
@Component
interface MainComponent {
fun inject(mainActivity: MainActivity)
}
class MainActivity : AppCompatActivity() {
@JvmField
@Inject
var person: Person? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
DaggerMainComponent.builder().build().inject(this)
person!!.name = "小明"
tv.text = person!!.name
}
}
Kotlin中使用Dagger2 可能导致错误"Dagger does not support injection into private fields"
Kotlin 生成.java文件时属性默认为 private,给属性添加@JvmField声明可以转成 public
java
implementation 'com.google.dagger:dagger:2.17'
//
annotationProcessor 'com.google.dagger:dagger-compiler:2.17'
public class User {
public String name;
@Inject
public User() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
@Component()
public interface MainComponent {
void inject(MainActivity mainActivity);
}
public class MainActivity extends AppCompatActivity {
@Inject
public User user;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DaggerMainComponent.builder().build().inject(this);
TextView textView = (TextView) this.findViewById(R.id.tv);
user.setName("小明");
textView.setText(user.getName());
}
}