class BaseFactory implements Factory {

    @Override
    public final <T> T getObject(final String name, final Class<T> fieldType) {

        T o;
        try {
            o = locate(name, fieldType);
            if (o == null) {
                for (Factory root : roots) {
                    o = root.getObject(name, fieldType);
                    if (o != null)
                        return o;
                }
                // only try ctor at the root level, otherwise it will be invoked on each BaseFactory
                if (roots.length == 0)
                    o = ctorStrategy(name, fieldType);
            }
        } catch (InvocationTargetException e) {
            throw new RuntimeException(e.getTargetException());
        }
        return o;
    }

    public  BaseFactory(ICS ics);
    public  BaseFactory(ICS ics, Factory... roots);

}