将 Dagger 组件存储在静态字段中
Store Dagger component in a static field
我是 Dagger2 的新手,大多数时候我看到人们在扩展的 Application AppComponent 中创建 AppComponent 28=]。因此,任何时候您需要 AppComponent 时,您都可以通过应用程序请求它 class.
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 存储在应用程序中有哪些优缺点 class?
每次我们需要的时候通过工厂创建它是不是更好?
如果我们在静态字段中保留一个组件而不是每次都构建它,会不会有什么问题?
每次都构建组件可能(取决于组件的大小)很浪费,但更重要的是,如果您每次都重新创建组件,您使用的任何 @Scope
注释都不会共享同一个实例。将您的组件存储在 Application
class 中是一种常见的方法,因为它提供了一个规范的位置来在您的应用程序中检索组件。当您考虑应用程序的生命周期(尤其是测试)时,static
字段可能会很棘手,并且通常被认为是一种反模式。通过将组件保留在应用程序 class 中,您可以获得很多相同的好处,因为您可以正确地假设 Android 框架只会创建一个 Application
实例,只要您的应用程序处于活动状态.如果只有一个 Application
并且它只创建一个组件,则可以确保奇异性并且可以适当地控制组件的可见性。
我是 Dagger2 的新手,大多数时候我看到人们在扩展的 Application AppComponent 中创建 AppComponent 28=]。因此,任何时候您需要 AppComponent 时,您都可以通过应用程序请求它 class.
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 存储在应用程序中有哪些优缺点 class?
每次我们需要的时候通过工厂创建它是不是更好?
如果我们在静态字段中保留一个组件而不是每次都构建它,会不会有什么问题?
每次都构建组件可能(取决于组件的大小)很浪费,但更重要的是,如果您每次都重新创建组件,您使用的任何 @Scope
注释都不会共享同一个实例。将您的组件存储在 Application
class 中是一种常见的方法,因为它提供了一个规范的位置来在您的应用程序中检索组件。当您考虑应用程序的生命周期(尤其是测试)时,static
字段可能会很棘手,并且通常被认为是一种反模式。通过将组件保留在应用程序 class 中,您可以获得很多相同的好处,因为您可以正确地假设 Android 框架只会创建一个 Application
实例,只要您的应用程序处于活动状态.如果只有一个 Application
并且它只创建一个组件,则可以确保奇异性并且可以适当地控制组件的可见性。