我有一个简单的Dagger 2测试设置,基于http://konmik.github.io/snorkeling-with-dagger-2.html。 它注入一个PreferenceLogger,输出所有首选项。在注入的类中,我可以@Inject更多的类。匕首2和界面实现
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。当然,现在我需要一个模块来指定我想要使用的实现。
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无法正确注入的原因是什么?
我在这里提出一个相关的问题:http://stackoverflow.com/questions/30555285/dagger2-injecting-implementation-classes-with-component – EpicPandaForce
看看这篇文章和示例项目,该项目可能会有所帮助: https://medium.com/@m_mirhoseini/yet-another-mvp-article-part-1-lets-get-to-know-the-project-d3fd553b3e21#.6y9ze7e55 –