VContainer-integrations/entrypoint | 集成——纯 C# 入口点
1.VContainer 介绍2.VContainer-about/what-is-vcontainer | 概述——VContainer 是什么?3.VContainer-about/what-is-di | 概述——DI 是什么?4.VContainer-getting-started/installation | 入门——安装5.VContainer-getting-started/hello-world | 入门——Hello World6.VContainer-resolving/constructor-injection | 解析——构造函数注入7.VContainer-resolving/method-injection | 解析——方法注入8.VContainer-resolving/property-field-injection | 解析——属性/字段注入9.VContainer-resolving/gameobject-injection | 解析——注入到 MonoBehaviours 中10.VContainer-resolving/container-api | 解析——容器 API11.VContainer-registering/register-type | 注册——注册纯 C# 类型12.VContainer-registering/register-using-delegate | 注册——注册使用委托13.VContainer-registering/register-factory | 注册——注册工厂14.VContainer-registering/register-monobehaviour | 注册——注册 MonoBehaviour15.VContainer-registering/register-scriptable-object | 注册——注册 ScriptableObject16.VContainer-registering/register-collection | 注册——注册集合17.VContainer-registering/register-callbacks | 注册——注册回调
18.VContainer-integrations/entrypoint | 集成——纯 C# 入口点
19.VContainer-integrations/unitask | 集成——Unitask20.VContainer-integrations/unirx | 集成——UniRx21.VContainer-integrations/messagepipe | 集成——MessagePipe22.VContainer-integrations/ecs | 集成——ECS (beta)23.VContainer-scoping/lifetime-overview | 作用域——生命周期管理总览24.VContainer-scoping/generate-child-via-scene | 作用域——通过场景或 prefab 生成子作用域25.VContainer-scoping/generate-child-with-code-first | 作用域——通过代码优先生成子作用域26.VContainer-scoping/project-root-lifetimescope | 作用域——项目根作用域 LifetimeScope27.VContainer-diagnostics/diagnostics-window | 诊断——VContainer 诊断窗口28.VContainer-optimization/source-generator | 优化——源码生成器29.**VContainer-optimization/async-container-build | 优化——异步容器构建30.VContainer-optimization/parallel-container-build | 优化——并行容器构建31.VContainer-optimization/codegen | 优化——预生成 IL 代码(已弃用)32.VContainer-comparing/comparing-to-zenject | 对比 Zenject33.MessagePipe 中文文档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
后,默认的错误日志记录将失效。
:::
合集:
VContainer 中文文档
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!