使用Context进行存储库模块实现

时间:2017-08-23 13:13:49

标签: android repository-pattern android-architecture-components

我想实现Repository模块来处理数据操作。我在row目录中有JSON文件,并希望创建具体的Repository实现来从文件中获取数据。我不确定我是否可以在Context的构造函数或方法中使用Repository作为属性。

e.g。

public class UserRepository {

    UserRepository() {}

    public List<User> loadUserFromFile(Context contex) {
        return parseResource(context, R.raw.users);
    }
}

2 个答案:

答案 0 :(得分:2)

我没有看到将上下文作为属性传递有任何伤害。如果您不喜欢这个想法,那么您可以通过方便的方法检索上下文:Static way to get 'Context' on Android?

答案 1 :(得分:2)

恕我直言,您应该使用像Dagger2这样的DI(依赖注入)来为Context提供类似的内容,

<强> AppModule.class

@Module
public class AppModule {

    private Context context;

    public AppModule(@NonNull Context context) {
        this.context = context;
    }

    @Singleton
    @Provides
    @NonNull
    public Context provideContext(){
        return context;
    }

}

<强> MyApplication.class

public class MyApplication extends Application {

    private static AppComponent appComponent;

    public static AppComponent getAppComponent() {
        return appComponent;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        appComponent = buildComponent();
    }

    public AppComponent buildComponent(){
        return DaggerAppComponent.builder()
                .appModule(new AppModule(this))
                .build();
    }
}

<强> UserRepository.class

@Singleton
public class UserRepository {

    UserRepository() {}

    @Inject
    public List<User> loadUserFromFile(Context contex) {
        return parseResource(context, R.raw.users);
    }
}

快乐编码.. !!