Abstract class which allows input to be read from various controllers.
Temporary implementation only. This class is likely to be refactored into a better design when I get time to look at it properly. For now it's a quick-and-dirty way to get what I need.