@bodo: think with instance you register a specific instance with Kodein, so you always get that back when you inject it.
With singleton you register it in a lazy way (the instance is created once when it's looked up first, and then subsequent calls return that instance always)
With provider you register a factory function which creates a new instance every time it the dependency is looked up.