Removing trait and using abstract classes for providers and controllers.
Merge branch 'task/remove-traits-use-abstracts'