我正在努力学习如何使用Zenject的和统一,我遇到了一个特殊的问题,我不知道它是否有一个可能的解决方案,仅使用Zenject的api。
假设我有MethodA、MethodB和MethodC,还有一个SignalA。
是否有可能使这一序列:
SignalA.Fire() => MethodA (until released/finished)
=> MethodB (until released/finished)
=> MethodC (until released/finished)现在我有一段代码:
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看起来是这样的:
public class MethodA
{
public async void Execute()
{
await new WaitUntil(() => false);
}
}因此,预期的结果是永远不会执行MethodB和MethodC。
但是实际的结果是所有的方法都被执行。
是否有使用Zenject的api来实现这一目标的解决方案?
谢谢你的帮助,如果需要更多的信息,我很想知道。
发布于 2022-01-07 21:38:38
我不熟悉信号,但是检查文档,主要考虑第三点,也许您的情况不是很好的信号使用场景。
在以下情况下,何时使用信号信号最适合作为通信机制:
另一方面,我可能混淆了代码与同步执行概念的分离。委托或事件(是一种特定类型的委托)是您可以保留的一个类的备用逻辑片段,以便可以在另一个类中执行,以便您可以“订阅”或“侦听”代码的其他部分中可能发生的执行/调用事件的事情。但是,这不涉及任何异步代码或多线程。
据我所知,信号被用来与Zenject信号对象以解耦的方式处理事件订阅/调用,类似于用接口以解耦的方式处理类之间的依赖关系,因此首先我将检查您的情况是否适合它们使用--仔细检查文档,并遵循所提供的示例,直到概念单击。
同时,我将首先尝试使用c#普通委托,以便在弹出信号misson之后可以理解。另外,提供一个简单的工作示例,说明在不使用zenject的情况下所做的事情,对于实现实现同样的目标的zenject方式来说,将非常有帮助。
https://stackoverflow.com/questions/70624444
复制相似问题