android - Dagger 2 中范围使用的差异

标签 android dependency-injection dagger-2

我使用 Dagger 2 在我的应用程序中执行依赖反转规则。我只是在看Clean Architecture example by Fernando Cejas我有一个问题 - 下面介绍的两种方法有什么区别:

如果我像这样标记类(class):

@Singleton // or @PerActivity or @PerFragment, nevermind
public class UserDataStoreFactory {

  private final Context context;
  private final UserCache 
}

或者,如果我创建一个模块,在其中定义一个提供方法并将该模块添加到任何组件中(PerActivity、PerFragment 等,没关系)

@Module
public class SomeModule {
     @Provides
     @Singleton  // or @PerActivity or @PerFragment, nevermind
     UserDataStoreFactory providesUserDataStoreFactory (Context context, UserCache userCache) {
          return new UserDataStoreFactory(context, userCache)
     }
}

最佳答案

这两种方法是相同的:两者都允许将 UserDataStoreFactory 注入(inject)到 Singleton(或 @PerActivity/@PerFragment/nevermind)范围内的整个应用程序中。

前一种方法(使用范围标记类)仅在类具有 @Inject 注解的构造函数时才有效。第二种方法不需要构造函数注释,但也需要额外的样板代码,这些代码会在构造函数参数更改时发生更改。这使得第一种方法更能适应 UserDataStoreFactory 上的依赖关系更改,即使它们在图表中实现了相同的最终结果;但是,只有当类是可以更改的代码,或者是为范围依赖注入(inject)而构建的代码时,第一种方法才可能可行。

关于android - Dagger 2 中范围使用的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42233721/

相关文章:

c# - 如何在 dotnet core 3 中使用依赖项在启动时调用自定义服务?

android - Dagger2 范围,每个组件的实例

android - Android Java代码中 'instanceof'的影响

dependency-injection - 修改默认 MVC5 项目以使用自定义 UserStore

java - 我们什么时候想注入(inject)类而不是实例?

android - Dagger 不为/测试类生成组件

android - 如何提供2个Retrofit接口(interface)宽度不同级别的日志记录?

Android:如何从我的应用程序中使用命令语音打开语音输入

Android 应用内结算,多次购买同一商品

java - 如何在 Firebase Android 中执行查询 SQL IN 子句