我的游戏有很多子系统。他们可以互相使用。早些时候,我正在初始化子系统引用并将其存储到静态 Game 对象中,而不是制作单例。现在我看到 Game 对其他类的引用太多,看起来很混乱:
public static PlayerSettings PlayerSettings { get { return _playerSettings; } }
public static CommunityClient Community { get; private set; }
public static DatabaseConnectionWrapper Database { get; set; }
public static LoginConnectionWrapper LoginProtocolConnection { get; set; }
public static WorldEmulatorConnection WorldEmulatorConnection { get; set; }
public static WorldPlayerConnection WorldPlayerConnection { get; set; }
public static WorldConnection WorldConnection { get { return IsEmulatorMode ? (WorldConnection)WorldEmulatorConnection : WorldPlayerConnection; } }
public static MusicManager MusicManager { get; private set; }
public static SkyboxManager SkyboxManager { get; private set; }
public static VKInfo VK { get; private set; }
我能处理什么呢?我不需要这些子系统的抽象。而且我认为单例并不适合这种情况 - 架构看起来被分割成碎片。我想从一个地方以正确的顺序初始化我的所有子系统。但是引用的类太多了...
添加
查看 DI - 我可以将依赖项发送到类构造函数并初始化静态工厂中的每个类。这就是我要找的。
但是我刚刚意识到我的问题是,当我尝试使用 Unity3D 对象组件架构时,我无法将依赖关系发送到构造函数,因为类初始化是从 UnityEngine 调用的。
所以在这种情况下,我需要 Singleton 或 Blob 来保留引用。如果我抛弃 Unity 架构,那么我将从构造函数获取所有依赖项,并且不需要单例或 blob。
我需要重新设计我的架构,UnityEngine 不会创建需要获取子系统引用的对象,而是从我的代码中创建这些类,并让他们创建和管理他们的 UnityEngine“游戏对象”。