簡體   English   中英

將Dagger組件存儲在靜態字段中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM