Zenject绑定:限制类B注入范围,仅允许类A直接注入
Zenject实现单例IB与类A直接注入B的方案
完全可行,核心是通过Zenject的绑定条件限制B的注入范围,同时让IB和A依赖的B共享同一个单例实例,具体实现如下:
绑定逻辑代码
public class YourInstaller : MonoInstaller { public override void InstallBindings() { // 仅允许类A直接注入B,且B为单例 Container.Bind<B>().AsSingle().WhenInjectedInto<A>(); // 将IB接口绑定到B的单例实例,全局开放注入 Container.Bind<IB>().To<B>().AsSingle(); } }
逻辑说明
- 当类A需要注入B时,容器会匹配到带
WhenInjectedInto<A>()条件的B绑定,复用唯一的B实例。 - 其他类尝试直接注入B时,由于没有符合条件的绑定,容器会抛出注入错误,实现了“仅A能直接用B”的限制。
- 所有注入IB的类,都会获取到同一个B单例,保证全局只有一个B实例。
- 全程未使用
Resolve方法,完全遵循Zenject的绑定规范。
可选优化
如果需要在容器初始化阶段就创建B实例(而非首次注入时才创建),可以给IB的绑定加上NonLazy():
Container.Bind<IB>().To<B>().AsSingle().NonLazy();
内容的提问来源于stack exchange,提问作者marcg11
相关产品推荐
相关产品推荐

