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 异步支持

IAsyncStartableIStartable 的一个变体。
其执行时机与 IStartable 相同,但可使用 async Awaitable StartAsync() 语法。

UniTask 用户可以选择 UniTask 版本的 StartAsync
UniTask 集成

处理未捕获的异常

在应用程序端,无法捕获在 Start() 和 Tick() 等过程中抛出的异常。

默认情况下,VContainer 会将未处理的异常记录为 UnityEngine.Debug.LogException
也可以为每个 LifetimeScope 注册一个回调用来自定义异常处理:

builder.RegisterEntryPointExceptionHandler(ex =>
{
    // ...
});

:::caution
注册自定义处理器 RegisterEntryPointExceptionHandler 后,默认的错误日志记录将失效。
:::

posted @   凌雪寒  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示