Service Provider
Represents a provider of a service of type T.
Plugins can use these to provide classes to other plugins in a way that allows them to not need to know who they are actually providing the service to (if anyone), which is a neat abstraction layer.