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

如何在单个ManaGraphics脚本中使用不同Inject ID注入ManaManager?

可行的实现方案

方案1:注入容器并手动解析对应实例

无需子类化,直接在ManaGraphics中注入DiContainer,再通过传入的Team参数解析对应ID的ManaManager:

public class ManaGraphics
{
    private ManaManager _manaManager;

    // 注入容器,同时传入目标阵营
    [Inject]
    public void Setup(DiContainer container, Team targetTeam)
    {
        _manaManager = container.Resolve<ManaManager>(targetTeam);
        // 此处初始化UI绑定逻辑,比如监听 mana 变化事件
    }
}

绑定ManaGraphics时指定阵营参数:

public override void InstallBindings()
{
    // 原有ManaManager绑定保持不变
    Container.Bind<ManaManager>().WithId(Team.Ally).AsSingle();
    Container.Bind<ManaManager>().WithId(Team.Enemy).AsSingle();

    // 绑定己方ManaGraphics,传入Ally阵营
    Container.Bind<ManaGraphics>().AsSingle().WithArguments(Team.Ally);
}

后续若需添加敌方UI,只需新增一行绑定:

Container.Bind<ManaGraphics>().WithId(Team.Enemy).AsSingle().WithArguments(Team.Enemy);

方案2:使用工厂模式创建实例

通过工厂类封装ManaGraphics的创建逻辑,根据传入的Team自动匹配对应的ManaManager:

public class ManaGraphicsFactory
{
    private readonly DiContainer _container;

    [Inject]
    public ManaGraphicsFactory(DiContainer container)
    {
        _container = container;
    }

    public ManaGraphics Create(Team team)
    {
        var manaManager = _container.Resolve<ManaManager>(team);
        return new ManaGraphics(manaManager);
    }
}

// 修改ManaGraphics构造函数,直接接收ManaManager实例
public class ManaGraphics
{
    private readonly ManaManager _manaManager;

    public ManaGraphics(ManaManager manaManager)
    {
        _manaManager = manaManager;
        // 初始化UI逻辑
    }
}

使用时注入工厂并创建实例:

// 在需要创建ManaGraphics的类中
[Inject]
private ManaGraphicsFactory _factory;

void Start()
{
    // 创建己方ManaUI
    var allyManaGraphics = _factory.Create(Team.Ally);
    // 挂载到对应UI节点
}

方案3:利用Zenject的上下文绑定(可选)

如果项目使用场景上下文或其他子容器,可以为不同阵营创建独立上下文,但这种方式适合复杂场景,当前需求下前两种方案更轻量。

为什么不推荐子类化

子类化会导致代码冗余,后续需要支持敌方UI时,又要复制几乎相同的代码到EnemyManaGraphics,维护成本高,也不符合DRY(Don't Repeat Yourself)原则。

内容的提问来源于stack exchange,提问作者Franco Soler

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 05:43:36