我是Dagger2中的新手,大部分时间我都看到人们在扩展的应用程序类中创建了 AppComponent 。因此,只要您需要AppComponent,您就可以通过Application类请求它。
public class App extends Application {
private AppComponent mAppComponent;
@Override
public void onCreate() {
super.onCreate();
mAppComponent = DaggerAppComponent.builder()
.applicationModule(new ApplicationModule(this))
.build();
}
public AppComponent getAppComponent() {
return mAppComponent;
}
@VisibleForTesting
public void setAppComponent(AppComponent appComponent) {
mAppComponent = appComponent;
}
}
我也看到有人使用 ComponentFactory
public class ComponentFactory {
public static final AppComponent getComponent(Application context) {
return DaggerApplicationComponent.builder()
.applicationModule(new ApplicationModule(context))
.build();
}
将AppComponent存储在Application类中的优缺点是什么?
每次我们需要它时,最好通过工厂创建吗?
如果我们在静态字段中保留Component而不是每次构建它,会不会有任何问题?
答案 0 :(得分:2)
每次构建组件(取决于组件的大小)都是浪费的,但更重要的是,如果每次重新创建组件,则使用的任何@Scope
注释都不会共享同一个实例。将您的组件存储在Application
类中是一种常见方法,因为它提供了一个规范的位置来检索整个应用中的组件。当您考虑应用程序的生命周期(尤其是测试时)时,static
字段可能会很棘手,并且通常被认为是反模式。通过将组件保留在应用程序类中可以获得许多相同的好处,因为只要您的应用程序处于活动状态,您就可以正确地假设Android框架只会创建一个Application
实例。如果只有一个Application
并且它只创建一个组件,则可以确保单一性,并且可以正确控制组件的可见性。