外观
VContainer 常见坑点
约 321 字大约 1 分钟
2026-03-14
懒加载
一般来说,90%的问题都是这个。
当你在某个LifetimeScope或者Installer中进行
builder.Register<UnitManager>(Lifetime.Singleton);时, UnitManager并不会自动进行实例化,而会在其它类需要UnitManager的注入的那一刻,才会触发其的实例化
这就导致了如果你的注册类不会被其它类需要,它一辈子也不会被实例化
解决方案
采用
builder.RegisterEntryPoint<UnitManager>();
public class UnitManager : IStartable
{
public void Start() { }
}任意实现一个VContainer生命周期方法,空方法也行;这样其会被加入VContainer的生命周期调度中,从而触发实例化
生命周期冲突
VContainer并不具备类似Extenject会在Unity的Awake或其它一切原生生命周期方法前完成容器构建的能力
因此最佳实践是,在需要注入的Monobehaviour中不要在任何Unity原生初始化生命周期方法Awake和Start中使用依赖注入项
而是使用方法注入解决该问题
没有默认自注入
对于初始存在场景中的GO,vcontainer默认不会对其进行注入
解决方案
使用项目的CompositeLifetimeScope扩展,开启autoInjectSelf,它会注入自身和子物体
更新日志
2026/4/16 11:07
查看所有更新日志
e4055-Merge pull request #12 from azaneNH37/doc于