我使用 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/