【发布时间】:2017-04-20 22:51:07
【问题描述】:
我正在尝试在非活动类中注入上下文。就我而言,我正在尝试注入模型类(来自 MVP 模式)。我需要 Context 从资源中获取字符串。方法 result() 返回 Observable ,它返回 ViewModel ,它是修改后的 API 模型。 ViewModel 用于在 MainActivity 中显示。这段代码我试过了,但是Context为null,我认为是没有注入。
public class MainActivityModel implements MainActivityMVP.Model {
@Inject
Context context;
private Repository repository;
public MainActivityModel(Repository repository) {
((App) getApplication()).getComponent().inject(this); //Cannot resolve getApplication() method :(
this.repository = repository;
}
@Override
public Observable<List<ViewModel>> result(String username) {
return repository.getRepositories(username).map(new Func1<List<Repository>, List<ViewModel>>() {
@Override
public List<ViewModel> call(List<Repository> repositories) {
List<ViewModel> viewModelList = new ArrayList<ViewModel>();
for (Repository repository : repositories) {
// here Context is null
viewModelList.add(new ViewModel(context.getString(R.string.repository) + repository.getName()));
}
return viewModelList;
}
});
}
}
这是 Component 类,其中有一个 inject(MainActivityModel target) 方法,我无法使用该方法注入 MainActivityModel,因为 getApplication 在非 Activity 类中不可用:
@Singleton
@Component(modules = {ApplicationModule.class, MainActivityModule.class, GithubApiModule.class})
public interface ApplicationComponent {
void inject(MainActivity target);
void inject(MainActivityModel target);
}
我认为 Context 可以通过 result(String username, Context context) 方法发送。但是,如果我将 Context 作为方法参数传递,那么依赖注入的含义是什么?也许我误解了 DI 的基本概念。
所以我的问题是:是否可以在非活动类中注入上下文?还是应该作为方法参数传递?
【问题讨论】:
标签: java android dependency-injection dagger-2