V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
az22c

依赖注入:如何创建 3 个互相依赖的单例?

  •  
  •   az22c · Oct 13, 2021 · 1420 views
    This topic created in 1657 days ago, the information mentioned may be changed or developed.

    demo1

    demo2

    一开始如 demo1,有“忍者”、“剑”、“手里剑”三个对象实例。"剑“对象会注入到”忍者“中,被依赖引用到。

    最终,我想同时创建 3 个互相依赖的单例:“忍者”、“剑”、“手里剑”,每个实例可能会互相依赖。其中,当”剑“对象依赖”忍者“对象的时候,如 demo2,想通过 sword.getOwner 获取对应的”忍者“,就会报”循环依赖“错误。

    如何实现创建 3 个互相依赖的单例?

    Supplement 1  ·  Oct 14, 2021
    3 replies    2021-10-13 22:39:48 +08:00
    dqzcwxb
        1
    dqzcwxb  
       Oct 13, 2021
    pluvet
        2
    pluvet  
       Oct 13, 2021
    不要直接依赖,提取接口。举个例子,sword 实现 IGameItem,player 实现 IPlayer,sword.getOwner 返回一个 IPlayer 。依赖关系:sword 依赖 IGameItem,IGameItem 依赖 IPlayer,player 依赖 IPlayer 。
    az22c
        3
    az22c  
    OP
       Oct 13, 2021
    我没有太看得懂。
    @pluvet 你这个描述的应该只是接口。好像还是额外需要添加手动赋值的代码吧。比如 sword.getOwner 函数的函数体,就是耦合的点。
    我觉得我想要的是,在只描述接口的条件下,能在运行时同时“自动”创建 3 个实例,然后每个实例有对应的属性指向另外 2 个实例。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   4846 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 10:01 · PVG 18:01 · LAX 03:01 · JFK 06:01
    ♥ Do have faith in what you're doing.