def provide(self, name):
        """Gets the value registered with ``name`` and determines whether the
        value is a provider or a configuration setting. The ``KeyError`` is
        raised when the ``name`` is not found.

        The registered value is interpreted as a provider if it's callable. The
        provider is called with a single argument, the current
        :class:`Container` object. Returns the return value of a provider or
        the value itself in case the value is not callable.

        :param name:
            The name of the provider or configuration setting.
        """
        rv = self[name]
        return rv(self) if callable(rv) else rv