@Override public Collection<FactoryHandle> getAllFactoryHandles() { final Collection<FactoryHandle> allHandles = new ArrayList<FactoryHandle>(); for (final Context context : contexts) { for (final Factory<?> factory : context.getAllFactories()) { allHandles.add(factory.getHandle()); } } return allHandles; }
@Override public <T> void registerFactory(final Factory<T> factory) { factories.put(factory.getHandle().getFactoryName(), factory); }
@Override protected void registerInstance(final Object unwrappedInstance, final Factory<?> factory) { super.registerInstance(unwrappedInstance, factory); instances.put(factory.getHandle().getFactoryName(), unwrappedInstance); }
@Override public void addContext(final Context context) { if (!contexts.contains(context)) { contexts.add(context); context.setContextManager(this); for (final Factory<?> factory : context.getAllFactories()) { contextsByFactoryName.put(factory.getHandle().getFactoryName(), context); } } }
public void addFactory(final Factory<?> factory) { contextManager.addFactory(factory); addFactory(factory.getHandle()); } }
@Override public <T> T getActiveNonProxiedInstance(final String factoryName) { if (hasActiveInstance(factoryName)) { return getActiveInstance(factoryName); } else if (isCurrentlyCreatingActiveInstance(factoryName)) { final Factory<T> factory = this.<T>getFactory(factoryName); final T incomplete = factory.getIncompleteInstance(); if (incomplete == null) { throw new RuntimeException("Could not obtain an incomplete instance of " + factory.getHandle().getActualType().getName() + " to break a circular injection."); } else { logger.warn("An incomplete " + factory.getHandle().getActualType() + " was required to break a circular injection."); return incomplete; } } else { return createNewUnproxiedInstance(factoryName); } }