use of com.google.inject.Module in project roboguice by roboguice.
the class OverrideModuleTest method testFailsIfOverridenScopeInstanceHasBeenUsed.
public void testFailsIfOverridenScopeInstanceHasBeenUsed() {
final Scope scope = new Scope() {
public <T> Provider<T> scope(Key<T> key, Provider<T> unscoped) {
return unscoped;
}
@Override
public String toString() {
return "ORIGINAL SCOPE";
}
};
final Module original = new AbstractModule() {
@Override
protected void configure() {
bindScope(TestScopeAnnotation.class, scope);
bind(Date.class).in(scope);
bind(String.class).in(scope);
}
};
Module originalWrapper = new AbstractModule() {
@Override
protected void configure() {
install(original);
}
};
Module replacements = new AbstractModule() {
@Override
protected void configure() {
bindScope(TestScopeAnnotation.class, new SingleUseScope());
}
};
try {
createInjector(Modules.override(originalWrapper).with(replacements));
fail("Exception expected");
} catch (CreationException e) {
assertContains(e.getMessage(), "1) The scope for @TestScopeAnnotation is bound directly and cannot be overridden.", "original binding at " + original.getClass().getName() + ".configure(", asModuleChain(originalWrapper.getClass(), original.getClass()), "bound directly at " + original.getClass().getName() + ".configure(", asModuleChain(originalWrapper.getClass(), original.getClass()), "bound directly at " + original.getClass().getName() + ".configure(", asModuleChain(originalWrapper.getClass(), original.getClass()), "at ", replacements.getClass().getName() + ".configure(", asModuleChain(Modules.OverrideModule.class, replacements.getClass()));
}
}
use of com.google.inject.Module in project roboguice by roboguice.
the class OverrideModuleTest method testOverrideOfOverride.
public void testOverrideOfOverride() {
Module original = new AbstractModule() {
@Override
protected void configure() {
bind(String.class).toInstance("A1");
bind(key2).toInstance("A2");
bind(key3).toInstance("A3");
}
};
Module replacements1 = new AbstractModule() {
@Override
protected void configure() {
bind(String.class).toInstance("B1");
bind(key2).toInstance("B2");
}
};
Module overrides = Modules.override(original).with(replacements1);
Module replacements2 = new AbstractModule() {
@Override
protected void configure() {
bind(String.class).toInstance("C1");
bind(key3).toInstance("C3");
}
};
Injector injector = createInjector(Modules.override(overrides).with(replacements2));
assertEquals("C1", injector.getInstance(String.class));
assertEquals("B2", injector.getInstance(key2));
assertEquals("C3", injector.getInstance(key3));
}
use of com.google.inject.Module in project mechanoid by robotoworks.
the class NetModelActivator method createInjector.
protected Injector createInjector(String language) {
try {
Module runtimeModule = getRuntimeModule(language);
Module sharedStateModule = getSharedStateModule();
Module uiModule = getUiModule(language);
Module mergedModule = Modules2.mixin(runtimeModule, sharedStateModule, uiModule);
return Guice.createInjector(mergedModule);
} catch (Exception e) {
logger.error("Failed to create injector for " + language);
logger.error(e.getMessage(), e);
throw new RuntimeException("Failed to create injector for " + language, e);
}
}
use of com.google.inject.Module in project roboguice by roboguice.
the class RoboGuice method overrideApplicationInjector.
/**
* Shortcut to obtain an injector during tests. It will load all modules declared in manifest, add a {@code DefaultRoboModule},
* and override all bindings defined in test modules. We use default stage by default.
*
* RoboGuice.overrideApplicationInjector( app, new TestModule() );
*
* @see com.google.inject.util.Modules#override(com.google.inject.Module...)
* @see roboguice.RoboGuice#getOrCreateBaseApplicationInjector(android.app.Application, com.google.inject.Stage, com.google.inject.Module...)
* @see roboguice.RoboGuice#newDefaultRoboModule(android.app.Application)
* @see roboguice.RoboGuice#DEFAULT_STAGE
*
* If using this method with test cases, be sure to call {@link roboguice.RoboGuice.Util#reset()} in your test teardown methods
* to avoid polluting our other tests with your custom injector. Don't do this in your real application though.
*/
public static Injector overrideApplicationInjector(final Application application, Module... overrideModules) {
synchronized (RoboGuice.class) {
final List<Module> baseModules = extractModulesFromManifest(application);
final Injector rtrn = Guice.createInjector(DEFAULT_STAGE, Modules.override(baseModules).with(overrideModules));
injectors.put(application, rtrn);
return rtrn;
}
}
use of com.google.inject.Module in project roboguice by roboguice.
the class RoboGuice method extractModulesFromManifest.
private static List<Module> extractModulesFromManifest(Application application) {
try {
final ArrayList<Module> modules = new ArrayList<Module>();
final ApplicationInfo ai = application.getPackageManager().getApplicationInfo(application.getPackageName(), PackageManager.GET_META_DATA);
final Bundle bundle = ai.metaData;
final String roboguiceModules = bundle != null ? bundle.getString("roboguice.modules") : null;
final DefaultRoboModule defaultRoboModule = newDefaultRoboModule(application);
final String[] moduleNames = roboguiceModules != null ? roboguiceModules.split("[\\s,]") : new String[] {};
modules.add(defaultRoboModule);
for (String name : moduleNames) {
if (Strings.notEmpty(name)) {
final Class<? extends Module> clazz = Class.forName(name).asSubclass(Module.class);
try {
modules.add(clazz.getDeclaredConstructor(Application.class).newInstance(application));
} catch (NoSuchMethodException ignored) {
modules.add(clazz.newInstance());
}
}
}
return modules;
} catch (Exception e) {
throw new RuntimeException("Unable to instantiate your Module. Check your roboguice.modules metadata in your AndroidManifest.xml", e);
}
}
Aggregations