modified some indentation
Added protocols for the different kinds of providers, Modified the wrapperprovider to automatically generate a shared instance for each of it's subclasses when needed