我有一个简单的 Dagger 2 测试设置,基于http://konmik.github.io/snorkeling-with-dagger-2.html。它注入了一个输出所有首选项的 PreferenceLogger。在注入的类中,我可以@Inject 更多的类。
public class MainActivity extends Activity {
@Inject PreferencesLogger logger;
@Inject MainPresenter presenter;
@Override protected void onCreate(Bundle savedInstanceState) {
MyApplication.getComponent().inject(this);
presenter.doStuff();
logger.log(this);
}
}
public class PreferencesLogger {
@Inject OkHttpClient client;
@Inject public PreferencesLogger() {}
public void log(Contect context) {
// this.client is available
}
}
当我运行它时,设置了记录器,并且在 PreferencesLogger.log 中正确设置了 OkHttpClient。所以这个例子按预期工作。现在我正在尝试建立一个 MVP 结构。有一个带有实现的 MainPresenter 接口。在 MainActivity 我设置了一个:
@Inject MainPresenter presenter;
所以我可以用另一种(调试或测试)实现来切换这个 MainPresenter。当然,现在我需要一个 Module 来指定我想要使用的实现。
public interface MainPresenter {
void doStuff();
}
public class MainPresenterImpl implements MainPresenter {
@Inject OkHttpClient client;
public MainPresenterImpl() {}
@Override public void doStuff() {
// this.client is not available
}
}
@Module public class MainActivityModule {
@Provides MainPresenter provideMainPresenter() {
return new MainPresenterImpl();
}
}
现在出现了一个问题,即不再注入 OkHttpClient。当然,我可以更改模块以接受参数 OkHttpClient,但我认为这不是建议的方法。MainPresenterImpl 没有正确注入有什么原因吗?