Search in sources :

Example 96 with Module

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()));
    }
}
Also used : Scope(com.google.inject.Scope) Modules(com.google.inject.util.Modules) CreationException(com.google.inject.CreationException) Module(com.google.inject.Module) PrivateModule(com.google.inject.PrivateModule) AbstractModule(com.google.inject.AbstractModule) Key(com.google.inject.Key) Date(java.util.Date) Provider(com.google.inject.Provider) AbstractModule(com.google.inject.AbstractModule)

Example 97 with Module

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));
}
Also used : Guice.createInjector(com.google.inject.Guice.createInjector) Injector(com.google.inject.Injector) Module(com.google.inject.Module) PrivateModule(com.google.inject.PrivateModule) AbstractModule(com.google.inject.AbstractModule) AbstractModule(com.google.inject.AbstractModule)

Example 98 with Module

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);
    }
}
Also used : Module(com.google.inject.Module) SharedStateModule(org.eclipse.xtext.ui.shared.SharedStateModule)

Example 99 with Module

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;
    }
}
Also used : ContextScopedRoboInjector(roboguice.inject.ContextScopedRoboInjector) RoboInjector(roboguice.inject.RoboInjector) Injector(com.google.inject.Injector) Module(com.google.inject.Module) DefaultRoboModule(roboguice.config.DefaultRoboModule)

Example 100 with Module

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);
    }
}
Also used : Bundle(android.os.Bundle) ArrayList(java.util.ArrayList) ApplicationInfo(android.content.pm.ApplicationInfo) DefaultRoboModule(roboguice.config.DefaultRoboModule) Module(com.google.inject.Module) DefaultRoboModule(roboguice.config.DefaultRoboModule) NameNotFoundException(android.content.pm.PackageManager.NameNotFoundException)

Aggregations

Module (com.google.inject.Module)386 Injector (com.google.inject.Injector)253 AbstractModule (com.google.inject.AbstractModule)252 Binder (com.google.inject.Binder)63 Test (org.junit.Test)51 PrivateModule (com.google.inject.PrivateModule)46 Provider (com.google.inject.Provider)44 ArrayList (java.util.ArrayList)30 CreationException (com.google.inject.CreationException)26 Guice.createInjector (com.google.inject.Guice.createInjector)25 Map (java.util.Map)24 Properties (java.util.Properties)22 ImmutableList (com.google.common.collect.ImmutableList)20 HashMap (java.util.HashMap)20 HashSet (java.util.HashSet)20 Key (com.google.inject.Key)19 Set (java.util.Set)19 ImmutableSet (com.google.common.collect.ImmutableSet)18 Binding (com.google.inject.Binding)17 List (java.util.List)17