我正在尝试在非Activity类中注入Context。在我的情况下,我正在尝试在Model类(MVP模式)中进行注入。我需要Context来从资源中获取字符串。方法result()返回Observable,该返回值返回修改后的API模型的ViewModel。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;
}
});
}
这是一个组件类,其中有一个inject(MainActivityModel target)方法,但我无法使用它来注入MainActivityModel,因为非Activity类中不可用getApplication:
@Singleton
@Component(modules = {ApplicationModule.class, MainActivityModule.class, GithubApiModule.class})
public interface ApplicationComponent {
void inject(MainActivity target);
void inject(MainActivityModel target);
}
我认为可以通过result(String username, Context context)方法发送上下文(Context)。但是如果我将Context作为方法参数传递,那么依赖注入(Dependency Injection)的意义是什么呢?也许我误解了DI的基本概念。
因此,我的问题是:是否可能在非活动类中注入Context?还是应该将其作为方法参数传递?