提示:为什么在ApplicationComponent范围内的类创建了两次?

时间:2020-10-23 03:25:18

标签: android dagger-hilt

我在一个多模块项目中使用Hilt,并且具有一个范围为df = (df.groupby([pd.Grouper(key='Date', freq='W-MON'), 'Store', 'Department', 'Employee']) .size() .sort_index(level=['Store', 'Department', 'Employee', 'Date']) .unstack(['Store', 'Department', 'Employee']).fillna(0)) Out[1]: Store Store1 Store2 Store3 \ Department dep1 dep2 dep1 dep2 dep1 Employee aemp bemp cemp demp aemp eemp femp cemp demp gemp bemp eemp Date 2020-08-03 1.0 1.0 2.0 3.0 1.0 1.0 2.0 0.0 1.0 1.0 2.0 1.0 2020-08-10 1.0 1.0 0.0 4.0 1.0 2.0 1.0 1.0 1.0 2.0 1.0 1.0 Store Department dep2 Employee demp Date 2020-08-03 1.0 2020-08-10 1.0 的模块。我希望此模块提供的所有内容都像一个单例,并且在应用程序的生命周期中仅创建一次。但是,我看到提供的类的构造函数在每个活动中都被调用一次。这是一个测试设置:

MyModule.java:

ApplicationComponent

MyApplication.java:

@Module
@InstallIn(ApplicationComponent.class)
public abstract class MyModule {
  @Binds
  public abstract Foo providesDomain(MyFoo domain);
}

每个活动:

@HiltAndroidApp
public class MyApplication extends MultiDexApplication {
  @Override
  public void onCreate() {
    super.onCreate();
  }
}

MyFoo.java:

@AndroidEntryPoint
public class MyActivity extends AppCompatActivity {

  @Inject
  Foo foo;

对于每个活动,将调用MyFoo构造函数,但应用程序相同。我的理解是,class MyFoo implements Foo { @Inject public MyFoo(@NonNull Application application) { Log.w("TEST", "My application: " + application); } } 范围内的模块不应发生这种情况。为什么要重新创建MyFoo?

1 个答案:

答案 0 :(得分:1)

我将自己指向the relevant Android documentation:该类本身需要使用范围进行注释。

在上面的示例中,MyFoo仅在应用程序范围内被这样注释:

@Singleton
class MyFoo implements Foo {
  @Inject
  public MyFoo(@NonNull Application application) {
    Log.w("TEST", "My application: " + application);
  }
}