Interface for a provider for dependency injection. A provider knows about the type it produces, and can produce a value.
Provied the value. T must be the same type represented by the TypeInfo returned by providedType.
Produce the value. A pointer to the value is passed to a delegate.
Return a TypeInfo describing the type provided.