Em. In our games, for example, there is always a GameManager class that manages and redirects logic.
Let's say for sending requests, we create RequestManager , which implements IRequestManager . In the simplest form:
public interface IRequestManager{ void Send(string name, Object data); } public class RequestManager : IRequestManager{ [...] // отправка запроса public void Send(string name, Object data){ // здесь отправляем запрос } }
And GameManager method to get a reference:
public interface IGameManager{ IRequestManager GetRequestManager(); } public class GameManager : IGameManager{ // инициализируете где-нибудь IRequestManager mRequestManager; // например тут public void InitRequestManager(){ mRequestManager = new RequestManager(); } public IRequestManager GetRequestManager(){ return mRequestManager ; } }
Now, if you need to send a request, then call the GetRequestManager method GetRequestManager the GameManager and send the request.
GameManager can be done as a singleton, something like this:
public class GameManager : IGameManager{ private statc IGameManager mSelf; // инициализируете где-нибудь private IRequestManager mRequestManager; // например тут public void InitRequestManager(){ mRequestManager = new RequestManager(); } public IRequestManager GetRequestManager(){ return mRequestManager ; } public statc IGameManager GetInstance(){ if(mSelf == null){ mSelf = new GameManager(); mSelf.InitRequestManager(); } return mSelf; } }
Then from anywhere in the program you can send a request like this:
GameManager.GetInstance().GetRequestManager().Send()