首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Unity & Zenject --如何按顺序从TSignal.Fire()执行方法

Unity & Zenject --如何按顺序从TSignal.Fire()执行方法
EN

Stack Overflow用户
提问于 2022-01-07 16:40:19
回答 1查看 398关注 0票数 1

我正在努力学习如何使用Zenject的和统一,我遇到了一个特殊的问题,我不知道它是否有一个可能的解决方案,仅使用Zenject的api。

假设我有MethodA、MethodB和MethodC,还有一个SignalA。

是否有可能使这一序列:

代码语言:javascript
复制
SignalA.Fire() => MethodA (until released/finished)

               => MethodB (until released/finished)

               => MethodC (until released/finished)

现在我有一段代码:

代码语言:javascript
复制
private void BindSignalA()
{

    Container.DeclareSignal<SignalA>().RunSync();
                    
    Container.BindSignal<SignalA>().ToMethod<MethodA>(handler => handler.Execute).FromNew();
    Container.BindSignal<SignalA>().ToMethod<MethodB>(handler => handler.Execute).FromNew();
    Container.BindSignal<SignalA>().ToMethod<MethodC>(handler => handler.Execute).FromNew();
}

MethodA看起来是这样的:

代码语言:javascript
复制
public class MethodA
{     
    public async void Execute()
    {
        await new WaitUntil(() => false);
    }
}

因此,预期的结果是永远不会执行MethodB和MethodC。

但是实际的结果是所有的方法都被执行。

是否有使用Zenject的api来实现这一目标的解决方案?

谢谢你的帮助,如果需要更多的信息,我很想知道。

EN

回答 1

Stack Overflow用户

发布于 2022-01-07 21:38:38

我不熟悉信号,但是检查文档,主要考虑第三点,也许您的情况不是很好的信号使用场景。

在以下情况下,何时使用信号信号最适合作为通信机制:

  • 可能有多个感兴趣的接收器在听信号。
  • 发送者不需要从接收者那里得到结果
  • 发送者甚至不关心它是否收到。换句话说,发送方不应该依赖于当信号被调用后发送者逻辑正确工作时,某些状态发生了变化。理想情况下,信号可以被认为是“火灾和遗忘”事件
  • 发送方不频繁地或在不可预测的时间触发信号。

另一方面,我可能混淆了代码与同步执行概念的分离。委托或事件(是一种特定类型的委托)是您可以保留的一个类的备用逻辑片段,以便可以在另一个类中执行,以便您可以“订阅”或“侦听”代码的其他部分中可能发生的执行/调用事件的事情。但是,这不涉及任何异步代码或多线程。

据我所知,信号被用来与Zenject信号对象以解耦的方式处理事件订阅/调用,类似于用接口以解耦的方式处理类之间的依赖关系,因此首先我将检查您的情况是否适合它们使用--仔细检查文档,并遵循所提供的示例,直到概念单击。

同时,我将首先尝试使用c#普通委托,以便在弹出信号misson之后可以理解。另外,提供一个简单的工作示例,说明在不使用zenject的情况下所做的事情,对于实现实现同样的目标的zenject方式来说,将非常有帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70624444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档