Liken the providers to the Silex provider, which works better out of the box
Test all parts of the updated providers and attach them to the right shutdown events
Trait abstraction to remove duplication
Small docblock change