[英]Store Dagger component in a static field
我是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而不是每次都構建它,將會有什么問題嗎?
每次構建組件都可能很浪費(取決於組件的大小),但更重要的是,如果每次重新創建組件,則您使用的任何@Scope
批注都不會共享同一實例。 將組件存儲在Application
類中是一種常見的方法,因為它為在整個應用程序中檢索組件提供了規范的位置。 當您考慮應用程序的生命周期(尤其是進行測試)時, static
字段可能會很棘手,並且通常被認為是一種反模式。 通過將組件保留在應用程序類中,您將獲得很多相同的好處,因為您可以正確地假定只要您的應用程序處於活動狀態,Android框架將僅創建一個Application
實例。 如果只有一個Application
並且僅創建一個組件,則可以確保奇異性,並且可以適當地控制對該組件的可見性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.