This is what my StepInjector looks like:
package com.tyndalehouse.step.web.client.gin;
import net.customware.gwt.dispatch.client.gin.ClientDispatchModule;
import net.customware.gwt.presenter.client.place.PlaceManager;
import com.google.gwt.inject.client.GinModules;
import com.google.gwt.inject.client.Ginjector;
import com.tyndalehouse.step.web.client.presenter.AppPresenter;
@GinModules({ ClientDispatchModule.class, StepClientModule.class })
public interface StepInjector extends Ginjector {
AppPresenter getAppPresenter();
PlaceManager getPlaceManager();
}
====================================
My StepClientModule
package com.tyndalehouse.step.web.client.gin;
import net.customware.gwt.presenter.client.EventBus;
import
net.customware.gwt.presenter.client.gin.AbstractPresenterModule;
import net.customware.gwt.presenter.client.place.PlaceManager;
import com.google.inject.Singleton;
import com.google.inject.TypeLiteral;
import com.tyndalehouse.step.web.client.CachingDispatchAsync;
import com.tyndalehouse.step.web.client.presenter.AppPresenter;
import
com.tyndalehouse.step.web.client.presenter.HistoryModulePresenter;
import
com.tyndalehouse.step.web.client.presenter.ModuleSelectorPresenter;
import com.tyndalehouse.step.web.client.presenter.ScripturePresenter;
import
com.tyndalehouse.step.web.client.presenter.ScriptureSelectorPresenter;
import com.tyndalehouse.step.web.client.presenter.StepModulePresenter;
import com.tyndalehouse.step.web.client.presenter.StepPresenter;
import com.tyndalehouse.step.web.client.presenter.TimelinePresenter;
import com.tyndalehouse.step.web.client.service.eventbus.StepEventBus;
import com.tyndalehouse.step.web.client.view.HistoryModuleView;
import com.tyndalehouse.step.web.client.view.ModuleSelectorView;
import com.tyndalehouse.step.web.client.view.ScriptureSelectorView;
import com.tyndalehouse.step.web.client.view.ScriptureView;
import com.tyndalehouse.step.web.client.view.StepView;
import com.tyndalehouse.step.web.client.view.TimelineView;
public class StepClientModule extends AbstractPresenterModule {
@Override
protected void configure() {
bind(EventBus.class).to(StepEventBus.class).in(Singleton.class);
bind(AppPresenter.class).in(Singleton.class);
bind(PlaceManager.class).in(Singleton.class);
//bind(Log.class).toProvider(LogProvider.class).in(Singleton.class);
...
}
}
====================================
and my AppPresenter
package com.tyndalehouse.step.web.client.presenter;
import net.customware.gwt.dispatch.client.DispatchAsync;
import com.allen_sauer.gwt.log.client.Log;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.inject.Inject;
public class AppPresenter {
private HasWidgets container;
private StepPresenter stepPresenter;
//passing them in to have GIN initialise them!
@Inject
public AppPresenter(final DispatchAsync dispatcher,
final StepPresenter stepPresenter,
ScripturePresenter scripturePresenter,
ScriptureSelectorPresenter scriptureSelectorPresenter
) {
Log.debug("AppPresenter is being initialised");
this.stepPresenter = stepPresenter;
}
private void showMain() {
container.clear();
container.add(stepPresenter.getDisplay().asWidget());
}
public void go(final HasWidgets container) {
this.container = container;
showMain();