Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#自定义属性能否实现订阅/取消订阅方法?_C#_Unity3d_Attributes_Zenject - Fatal编程技术网

c#自定义属性能否实现订阅/取消订阅方法?

c#自定义属性能否实现订阅/取消订阅方法?,c#,unity3d,attributes,zenject,C#,Unity3d,Attributes,Zenject,我正在使用Zenject,但这也适用于其他框架。我对必须复制/粘贴的锅炉铭牌代码不感兴趣。在这种情况下,OnEnable应该订阅一个信号,OnDisable应该取消订阅。可以编写一个属性使其更紧凑吗 例: 这是可能的吗?如果您希望在所有情况下都具有全局性的这种行为,那么可能最理想的情况是,当拥有事件处理程序的对象被禁用时,SignalBus本身不触发事件处理程序。如果可以,我认为这将修改Zenject?但是,这可以应用于任何类型的函数,可以是“Start”或“OnButtonClick”等。如果

我正在使用Zenject,但这也适用于其他框架。我对必须复制/粘贴的锅炉铭牌代码不感兴趣。在这种情况下,OnEnable应该订阅一个信号,OnDisable应该取消订阅。可以编写一个属性使其更紧凑吗

例:


这是可能的吗?

如果您希望在所有情况下都具有全局性的这种行为,那么可能最理想的情况是,当拥有事件处理程序的对象被禁用时,SignalBus本身不触发事件处理程序。如果可以,我认为这将修改Zenject?但是,这可以应用于任何类型的函数,可以是“Start”或“OnButtonClick”等。如果您在所有情况下都希望这种行为是全局的,那么可能最理想的情况是,当拥有事件处理程序的对象被禁用时,信号总线本身不会触发事件处理程序,我想那是对Zenject的修改?但是,这可以应用于任何类型的函数,可以是“开始”或“OnButtonClick”等。
private void Construct(SignalBus signalBus) { _signalBus = signalBus; }

private void OnEnable() { _signalBus.Subscribe<MyCustomPropertiesChangedSignal>(HandleMyCustomPropertiesChanged); }

private void OnDisable() { _signalBus.TryUnsubscribe<MyCustomPropertiesChangedSignal>(HandleMyCustomPropertiesChanged); }
    [SubscribeEnable (MyCustomPropertiesChangedSignal)]
    void HandleMyCustomPropertiesChanged (MyCustomPropertiesChangedSignal signal)
    {
....
    }