def register(id, &block)
      ref = __get id
      return ref.__getobj__ if ref && ref.weakref_alive?
      item = block.call
      return nil unless item
      __register id, item
    end
def register(id, &block)
      ref = __get id
      return ref.__getobj__ if ref && ref.weakref_alive?
      item = block.call
      return nil unless item
      __register id, item
    end
Register an item inside the cache if it does not yet exist
 If the item is not found inside the cache the block attached should return a valid reference