code: final T get() throws ProvideException {
          ScopeCache cache = getScopeCache();
          if(cache == null) {
              T impl = createInstance();
              if (impl == null) {
                  String qualifierName = (qualifier == null) ? "null" : qualifier.getClass().getName();
                  throw new ProvideException(String.format("Provider (type: %s, qualifier: " +
                          "%s) should not provide NULL as instance", type.getName(), qualifierName));
              }
  
              newlyCreatedInstance = impl;
  
              return impl;
          } else {
              return cache.get(this);
          }
      }
docs: Get an instance of the type the provider is providing. When there is a {@link ScopeCache}
  associated to it the provider will try to use the cached instance when applicable otherwise
  always generates a new instance.
  @return The instance being created or cached
  @throws ProvideException Exception thrown during constructing the object