using System; namespace Zenject { // Note that there's a reason we don't just have a generic // argument for signal type - because when using struct type signals it throws // exceptions on AOT platforms public class SignalCallbackWrapper : IDisposable { readonly SignalBus _signalBus; readonly Action _action; readonly Type _signalType; readonly object _identifier; public SignalCallbackWrapper( SignalBindingBindInfo bindInfo, Action action, SignalBus signalBus) { _signalType = bindInfo.SignalType; _identifier = bindInfo.Identifier; _signalBus = signalBus; _action = action; signalBus.SubscribeId(bindInfo.SignalType, _identifier, OnSignalFired); } void OnSignalFired(object signal) { _action(signal); } public void Dispose() { _signalBus.UnsubscribeId(_signalType, _identifier, OnSignalFired); } } }