我想知道我是否做得很好。
如果我要在CoffeHelper
和MainActivity
中使用一个实例SecondActivity
,
我做:
public class MyApplication extends Application {
public static CoffeeComponent getCoffeeComponent() {
return coffeeComponent;
}
private static CoffeeComponent coffeeComponent;
@Override
public void onCreate() {
super.onCreate();
coffeeComponent = createCoffeeComponent();
}
private CoffeeComponent createCoffeeComponent() {
return DaggerCoffeeComponent.builder().build();
}
}
-
@Singleton
@Component(modules = {CoffeeProvider.class})
public interface CoffeeComponent {
void provideCoffe(MainActivity mainActivity);
void provideCoffe(SecondActivity secondActivity);
}
现在,我可以写到MainActivity和SecondActivity中:
MyApplication.getCoffeeComponent().provideCoffe(this);
这是一个好习惯吗?
我的模块:
@Module
public class CoffeeProvider {
@Provides
@Singleton
CoffeeHelper getCoffeeHelper(){
return new CoffeeHelper();
}
}
答案 0 :(得分:2)
是的,CoffeeHelper
和MainActivity
都将提供SecondActivity
的唯一实例,假设它们具有这样的声明:@Inject CoffeeHelper helper
。由于scoping将返回唯一的实例,而@Singleton
是dagger-2作用域注释。
这是一个好习惯吗?
这是一个非常可疑的问题,并且大多基于意见,但这是非常常见的模式,除非您使用专为Android使用而设计的Dagger模块(它提供了AndroidInjector
和其他便利)。