Skip to content

Instantly share code, notes, and snippets.

@monry
Last active July 9, 2019 08:02
Show Gist options
  • Save monry/943f444fbd870f2ed56d7eb788a0407b to your computer and use it in GitHub Desktop.
Save monry/943f444fbd870f2ed56d7eb788a0407b to your computer and use it in GitHub Desktop.
Connect signal messages fired by SignalBus
using System;
using Zenject;
namespace ExtraZenject
{
public static class SignalExtensions
{
public static DeclareSignalIdRequireHandlerAsyncTickPriorityCopyBinder ConnectSignal<TFrom, TTo>(this DiContainer container) where TTo : new()
{
return container.ConnectSignal<TFrom, TTo>(_ => new TTo());
}
public static DeclareSignalIdRequireHandlerAsyncTickPriorityCopyBinder ConnectSignal<TFrom, TTo>(this DiContainer container, TTo value)
{
return container.ConnectSignal<TFrom, TTo>(_ => value);
}
public static DeclareSignalIdRequireHandlerAsyncTickPriorityCopyBinder ConnectSignal<TFrom, TTo>(this DiContainer container, Func<TFrom, TTo> callback)
{
return container.ConnectSignal(callback, _ => true);
}
public static DeclareSignalIdRequireHandlerAsyncTickPriorityCopyBinder ConnectSignal<TFrom, TTo>(this DiContainer container, Func<TFrom, TTo> callback, Func<TFrom, bool> condition)
{
var result = container.DeclareSignal<TTo>();
container
.BindSignal<TFrom>()
.ToMethod(
x =>
{
if (condition(x))
{
container.Resolve<SignalBus>().Fire(callback(x));
}
}
);
return result;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment