我有一个简单的Dagger 2测试设置,基于http://konmik.github.io/snorkeling-with-dagger-2.html。 它注入了一个PreferenceLogger,输出所有的偏好设置。在被注入的类中,我可以@Inject更多的类。
当我运行这个程序时,记录器被设置了,在PreferencesLogger.log中OkHttpClient也被正确设置了。所以这个例子的效果与预期一致。 现在我正在尝试建立MVP结构。 有一个MainPresenter接口和一个实现。在MainActivity中我设置了一个:
现在出现了一个问题,即OkHttpClient不再被注入。当然,我可以修改模块以接受参数OkHttpClient,但我认为这不是建议的方法。是否有任何原因导致MainPresenterImpl不能正确注入?
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不能正确注入?