Dagger:第三方类不能注解?
Dagger: Third-party classes can't be annotated?
我是 Dagger 的新手。在其 doc 中,表示
Third-party classes can't be annotated
但是在这个 UpcomingMoviesMVP 示例中,它在 MainActivity 中注入了 OTTO 总线:
public class MainActivity extends BaseActivity {
@Inject
protected Bus bus;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
protected void onResume() {
super.onResume();
registerBus();
}
@Override
protected void onPause() {
super.onPause();
unRegisterBus();
}
private void registerBus() {
bus.register(this);
}
private void unRegisterBus() {
bus.unregister(this);
}
@Subscribe
public void onItemSelectedEvent(MovieSelectedEvent event) {
launchMovieDetailsActivity(event.getMovie());
}
所以我认为Dagger应该调用Bus的默认构造函数(当然Bus构造函数中没有inject注解)。但是好像和"Third-party classes can't be annotated"冲突了?
I think Dagger should invoke the default constructor of the Bus
如果有多个构造器怎么办?它选择哪个?
Dagger 不会随机创建 class 个实例。你必须告诉它使用哪个或自己创建它。
在这种情况下,Bus
可以使用 @Inject
构造函数进行注释。这将使 Dagger 无需其他任何东西即可注入它。然而,奥托没有这个,所以它必须来自其他地方。
另一种方法是编写提供程序方法。
@Provides @Singleton Bus provideBus() {
return new Bus();
}
此方法(用 Dagger @Module
编写)将为 Dagger 提供一种获取 Bus
实例进行注入的方法。由于它被注释为 @Singleton
,Dagger 只会调用此方法一次,并在每次请求时一遍又一遍地重复使用该实例。
我是 Dagger 的新手。在其 doc 中,表示
Third-party classes can't be annotated
但是在这个 UpcomingMoviesMVP 示例中,它在 MainActivity 中注入了 OTTO 总线:
public class MainActivity extends BaseActivity {
@Inject
protected Bus bus;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
protected void onResume() {
super.onResume();
registerBus();
}
@Override
protected void onPause() {
super.onPause();
unRegisterBus();
}
private void registerBus() {
bus.register(this);
}
private void unRegisterBus() {
bus.unregister(this);
}
@Subscribe
public void onItemSelectedEvent(MovieSelectedEvent event) {
launchMovieDetailsActivity(event.getMovie());
}
所以我认为Dagger应该调用Bus的默认构造函数(当然Bus构造函数中没有inject注解)。但是好像和"Third-party classes can't be annotated"冲突了?
I think Dagger should invoke the default constructor of the Bus
如果有多个构造器怎么办?它选择哪个?
Dagger 不会随机创建 class 个实例。你必须告诉它使用哪个或自己创建它。
在这种情况下,Bus
可以使用 @Inject
构造函数进行注释。这将使 Dagger 无需其他任何东西即可注入它。然而,奥托没有这个,所以它必须来自其他地方。
另一种方法是编写提供程序方法。
@Provides @Singleton Bus provideBus() {
return new Bus();
}
此方法(用 Dagger @Module
编写)将为 Dagger 提供一种获取 Bus
实例进行注入的方法。由于它被注释为 @Singleton
,Dagger 只会调用此方法一次,并在每次请求时一遍又一遍地重复使用该实例。