-
Notifications
You must be signed in to change notification settings - Fork 3
DependencyInjectionDesignNote
Dependency Injection (DI) (http://en.wikipedia.org/wiki/Dependency_injection) is an important concept for creating modular applications as it reduces the need for factories but still emphasizes loose coupling of interfaces and implementation.
Guice (http://code.google.com/p/google-guice/) is Google's implementation of an DI framework.
GIN (http://code.google.com/p/google-gin/) is a subset of Guice that provides DI at the client.
Getting Started with Guice: (http://code.google.com/docreader/#p=google-guice&s=google-guice&t=GettingStarted)
Every main page, e.g. TestbedSelection, has its own Module and Ginjector. The Module configures how classes can be injected (e.g Singleton) and binds implementations to interfaces. The Ginjector provides convenience methods to instantiate certain classes.
Here is an example from the TestbedSelection page:
package eu.wisebed.wiseui.client.testbedselection.gin;
import com.google.gwt.inject.client.AbstractGinModule;
import com.google.inject.Singleton;
import eu.wisebed.wiseui.client.testbedselection.TestbedSelectionActivity;
import eu.wisebed.wiseui.client.testbedselection.presenter.*;
import eu.wisebed.wiseui.client.testbedselection.view.*;
public class TestbedSelectionModule extends AbstractGinModule {
@Override
protected void configure() {
bind(TestbedSelectionView.class).to(TestbedSelectionViewImpl.class).in(Singleton.class);
bind(ConfigurationView.class).to(ConfigurationViewImpl.class).in(Singleton.class);
bind(DetailView.class).to(DetailViewImpl.class).in(Singleton.class);
bind(LoginDialogView.class).to(LoginDialogViewImpl.class).in(Singleton.class);
bind(MapView.class).to(MapViewImpl.class).in(Singleton.class);
bind(RawWisemlView.class).to(RawWisemlViewImpl.class).in(Singleton.class);
bind(ConfigurationPresenter.class);
bind(DetailPresenter.class);
bind(LoginDialogPresenter.class);
bind(MapPresenter.class);
bind(RawWisemlPresenter.class);
bind(TestbedSelectionActivity.class);
}
}
package eu.wisebed.wiseui.client.testbedselection.gin;
import com.google.gwt.inject.client.Ginjector;
import eu.wisebed.wiseui.client.testbedselection.TestbedSelectionActivity;
import eu.wisebed.wiseui.client.testbedselection.presenter.*;
import eu.wisebed.wiseui.client.testbedselection.view.*;
public interface TestbedSelectionGinjector extends Ginjector {
TestbedSelectionActivity getTestbedSelectionActivity();
ConfigurationPresenter getConfigurationPresenter();
TestbedSelectionPresenter getTestbedSelectionPresenter();
DetailPresenter getDetailPresenter();
MapPresenter getMapPresenter();
LoginDialogPresenter getLoginDialogPresenter();
TestbedSelectionView getTestbedSelectionView();
ConfigurationView getConfigurationView();
DetailView getDetailView();
MapView getMapView();
LoginDialogView getLoginDialogView();
RawWisemlPresenter getRawWisemlPresenter();
RawWisemlView getRawWisemlView();
}