You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 21:33:10