VContainer-registering/register-monobehaviour | 注册——注册 MonoBehaviour
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 | 注册——注册 MonoBehaviour
15.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 中文文档通过 LifetimeScope 的 [SerializeField]
注册
[SerializeField]
YourBehaviour yourBehaviour;
// ...
builder.RegisterComponent(yourBehaviour);
:::note
RegisterComponent
和 RegisterInstance
类似,唯一区别是:通过 RegisterComponent
注册的 MonoBehaviour
即使未被显式解析,也会自动注入依赖。
:::
从场景中注册(带 LifetimeScope
)
builder.RegisterComponentInHierarchy<YourBehaviour>();
:::note
RegisterComponentInHierarchy
的生命周期固定为 Scoped
,因为它的生命周期与场景一致。
:::
注册 prefab 预制体组件(解析时动态生成)
[SerializeField]
YourBehaviour prefab;
// ...
builder.RegisterComponentInNewPrefab(prefab, Lifetime.Scoped);
注册到新 GameObject 的组件(解析时创建)
builder.RegisterComponentOnNewGameObject<YourBehaviour>(Lifetime.Scoped, "NewGameObjectName");
以接口形式注册组件
builder.RegisterComponentInHierarchy<YourBehaviour>()
.AsImplementedInterfaces();
注册到指定父级 Transform
// 在指定父级下创建新 GameObject
builder.RegisterComponentOnNewGameObject<YourBehaviour>(Lifetime.Scoped)
.UnderTransform(parent);
// 在指定父级下实例化预制体
builder.RegisterComponentInNewPrefab(prefab, Lifetime.Scoped)
.UnderTransform(parent);
// 在指定父级下查找现有组件
builder.RegisterComponentInHierarchy<YourBehaviour>()
.UnderTransform(parent);
或运行时动态获取父级:
builder.RegisterComponentOnNewGameObject<YourBehaviour>(Lifetime.Scoped)
.UnderTransform(() => {
// ...
return parent;
});
注册为 DontDestroyOnLoad
RegsiterComponent*
方法链可以设置为 DontDestroyOnLoad
:
// 新创建的 GameObject 不随场景销毁
builder.RegisterComponentOnNewGameObject<YourBehaviour>(Lifetime.Scoped)
.DontDestroyOnLoad();
// 实例化的预制体对象不随场景销毁
builder.RegisterComponentInNewPrefab(prefab, Lifetime.Scoped)
.DontDestroyOnLoad();
批量注册 MonoBehaviour
builder.UseComponents(components =>
{
components.AddInstance(yourBehaviour);
components.AddInHierarchy<YourBehaviour>();
components.AddInNewPrefab(prefab, Lifetime.Scoped);
components.AddOnNewGameObject<YourBehaviour>(Lifetime.Scoped, "name");
});
等价于逐条注册:
builder.RegisterComponent(yourBehaviour);
builder.RegisterComponentInHierarchy<YourBehaviour>();
builder.RegisterComponentInNewPrefab(prefab, Lifetime.Scoped);
builder.RegisterComponentOnNewGameObject<YourBehaviour>(Lifetime.Scoped, "name");
指定父级批量注册:
builder.UseComponents(parentTransform, components =>
{
// 在 `parentTransform` 下查找 GetComponentInChildren
components.AddInHierarchy<YourBehaviour>();
// 在 `parentTransform` 下实例化
components.AddInNewPrefab(prefab, Lifetime.Scoped);
components.AddOnNewGameObject<YourBehaviour>(Lifetime.Scoped, "name");
})
等价于:
builder.RegisterComponentInHierarchy<YourBehaviour>()
.UnderTransform(parentTransform);
builder.RegisterComponentInNewPrefab(prefab, Lifetime.Scoped)
.UnderTransform(parentTransform);
builder.RegisterComponentOnNewGameObject<YourBehaviour>(Lifetime.Scoped, "name")
.UnderTransform(parentTransform);
合集:
VContainer 中文文档
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~