VContainer-integrations/entrypoint | 集成——纯 C# 入口点
VContainer 允许使用纯 C# 类作为应用入口点。
相比功能复杂的 MonoBehaviour,这种方式能简化控制流。
class FooController : IStartable
{
void IStartable.Start()
{
// 初始化逻辑...
}
}
builder.RegisterEntryPoint<FooController>();
参见 注册纯 C# 类型
VContainer 通过自定义 PlayerLoopSystem 实现生命周期管理。
注册实现了标记接口的类后,它们会被调度到 Unity 的主循环中执行。
由于它使用了 PlayerLoopSystem,在任何时候注册(例如:IStartable 等)类,它都能正常工作。
可用的接口
| VContainer 入口点 | 时机 |
|---|---|
IInitializable.Initialize() |
容器构建后立即执行 |
IPostInitializable.PostInitialize() |
晚于 IInitializable.Initialize() |
IStartable.Start() |
近似 MonoBehaviour.Start() |
IAsyncStartable.StartAsync() |
近似 MonoBehaviour.Start() |
IPostStartable.PostStart() |
晚于 MonoBehaviour.Start() |
IFixedTickable.FixedTick() |
近似 MonoBehaviour.FixedUpdate() |
IPostFixedTickable.PostFixedTick() |
晚于 MonoBehaviour.FixedUpdate() |
ITickable.Tick() |
近似 MonoBehaviour.Update() |
IPostTickable.PostTick() |
晚于 MonoBehaviour.Update() |
ILateTickable.LateTick() |
近似 MonoBehaviour.LateUpdate() |
IPostLateTickable.PostLateTick() |
晚于 MonoBehaviour.LateUpdate() |
以及
IDisposable: 随容器销毁时调用。(适用于Lifetime.Singleton/Lifetime.Scoped)

:::note
Unity - Manual: Order of Execution for Event Functions
:::
async 异步支持
IAsyncStartable 是 IStartable 的一个变体。
其执行时机与 IStartable 相同,但可使用 async Awaitable StartAsync() 语法。
UniTask 用户可以选择 UniTask 版本的 StartAsync。
UniTask 集成
处理未捕获的异常
在应用程序端,无法捕获在 Start() 和 Tick() 等过程中抛出的异常。
默认情况下,VContainer 会将未处理的异常记录为 UnityEngine.Debug.LogException。
也可以为每个 LifetimeScope 注册一个回调用来自定义异常处理:
builder.RegisterEntryPointExceptionHandler(ex =>
{
// ...
});
:::caution
注册自定义处理器 RegisterEntryPointExceptionHandler 后,默认的错误日志记录将失效。
:::

浙公网安备 33010602011771号