Initial Commit
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
using System;
|
||||
namespace Zenject
|
||||
{
|
||||
public static class SignalExtensions
|
||||
{
|
||||
public static SignalDeclarationBindInfo CreateDefaultSignalDeclarationBindInfo(DiContainer container, Type signalType)
|
||||
{
|
||||
return new SignalDeclarationBindInfo(signalType)
|
||||
{
|
||||
RunAsync = container.Settings.Signals.DefaultSyncMode == SignalDefaultSyncModes.Asynchronous,
|
||||
MissingHandlerResponse = container.Settings.Signals.MissingHandlerDefaultResponse,
|
||||
TickPriority = container.Settings.Signals.DefaultAsyncTickPriority
|
||||
};
|
||||
}
|
||||
|
||||
public static DeclareSignalIdRequireHandlerAsyncTickPriorityCopyBinder DeclareSignal(this DiContainer container, Type type)
|
||||
{
|
||||
var signalBindInfo = CreateDefaultSignalDeclarationBindInfo(container, type);
|
||||
|
||||
var bindInfo = container.Bind<SignalDeclaration>().AsCached()
|
||||
.WithArguments(signalBindInfo).WhenInjectedInto(typeof(SignalBus), typeof(SignalDeclarationAsyncInitializer)).BindInfo;
|
||||
|
||||
var signalBinder = new DeclareSignalIdRequireHandlerAsyncTickPriorityCopyBinder(signalBindInfo);
|
||||
signalBinder.AddCopyBindInfo(bindInfo);
|
||||
return signalBinder;
|
||||
}
|
||||
|
||||
public static DeclareSignalIdRequireHandlerAsyncTickPriorityCopyBinder DeclareSignal<TSignal>(this DiContainer container)
|
||||
{
|
||||
return container.DeclareSignal(typeof(TSignal));
|
||||
}
|
||||
|
||||
public static DeclareSignalIdRequireHandlerAsyncTickPriorityCopyBinder DeclareSignalWithInterfaces<TSignal>(this DiContainer container)
|
||||
{
|
||||
Type type = typeof(TSignal);
|
||||
|
||||
var declaration = container.DeclareSignal(type);
|
||||
|
||||
Type[] interfaces = type.GetInterfaces();
|
||||
int numOfInterfaces = interfaces.Length;
|
||||
for (int i = 0; i < numOfInterfaces; i++)
|
||||
{
|
||||
container.DeclareSignal(interfaces[i]);
|
||||
}
|
||||
|
||||
return declaration;
|
||||
}
|
||||
|
||||
public static BindSignalIdToBinder<TSignal> BindSignal<TSignal>(this DiContainer container)
|
||||
{
|
||||
var signalBindInfo = new SignalBindingBindInfo(typeof(TSignal));
|
||||
|
||||
return new BindSignalIdToBinder<TSignal>(container, signalBindInfo);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user