Use current class for logger in abstract class.
Improve generic type methods and add documentation.
Add abstract getInternalProvider method and implementations.
Move ICapability activate and deactivate methods to abstract class.
Move valid providers field to abstract class.
Improve test helpers with factories and enclosed visibility.