General
There are three main types of classes in the game.
        
 Controllers - handle behavior, change position, set state, etc.
They get data and objects
        from providers and change the object’s values depending on the received data.
        
 Providers -  they provide data or objects to controllers;
         View - classes for UI, and for everything we can see on a screen. They often inherited from
          MonoBehavior.
GameContext - simple implementation of service locator
        pattern
Overview: we can register and get objects in any place where we want.
Validate
          attribute -custom attribute, which is used to check any UnityObjects implemented in a certain interface.