code: public Object getInstance() {
          try {
              if (prototype) {
                  return doGetInstance();
                  
              } else {
                  synchronized (cache) {
                      if (!cache.containsKey(type)) {
                          cache.put(type, doGetInstance());
                      }
                      
                      return cache.get(type);
                  }
              }
              
          } catch (IrohException e) {
              throw e;
              
          } catch (Exception e) {
              throw new FailedConstructionException(e);
          }
      }
docs: Retrieves an instance of this source's type, respecting scoping rules.
  
  @return An instance of this source's type.