191 lines
6.0 KiB
C#
191 lines
6.0 KiB
C#
using System;
|
|
#if !NOT_UNITY3D
|
|
using UnityEngine;
|
|
#endif
|
|
|
|
namespace Zenject
|
|
{
|
|
public enum ValidationErrorResponses
|
|
{
|
|
Log,
|
|
Throw
|
|
}
|
|
|
|
public enum RootResolveMethods
|
|
{
|
|
NonLazyOnly,
|
|
All
|
|
}
|
|
|
|
public enum SignalDefaultSyncModes
|
|
{
|
|
Synchronous,
|
|
Asynchronous
|
|
}
|
|
|
|
public enum SignalMissingHandlerResponses
|
|
{
|
|
Ignore,
|
|
Throw,
|
|
Warn
|
|
}
|
|
|
|
[Serializable]
|
|
[ZenjectAllowDuringValidation]
|
|
[NoReflectionBaking]
|
|
public class ZenjectSettings
|
|
{
|
|
public static ZenjectSettings Default = new ZenjectSettings();
|
|
|
|
#if !NOT_UNITY3D
|
|
[SerializeField]
|
|
#endif
|
|
bool _ensureDeterministicDestructionOrderOnApplicationQuit;
|
|
|
|
#if !NOT_UNITY3D
|
|
[SerializeField]
|
|
#endif
|
|
bool _displayWarningWhenResolvingDuringInstall;
|
|
|
|
#if !NOT_UNITY3D
|
|
[SerializeField]
|
|
#endif
|
|
RootResolveMethods _validationRootResolveMethod;
|
|
|
|
#if !NOT_UNITY3D
|
|
[SerializeField]
|
|
#endif
|
|
ValidationErrorResponses _validationErrorResponse;
|
|
|
|
#if !NOT_UNITY3D
|
|
[SerializeField]
|
|
#endif
|
|
SignalSettings _signalSettings;
|
|
|
|
public ZenjectSettings(
|
|
ValidationErrorResponses validationErrorResponse,
|
|
RootResolveMethods validationRootResolveMethod = RootResolveMethods.NonLazyOnly,
|
|
bool displayWarningWhenResolvingDuringInstall = true,
|
|
bool ensureDeterministicDestructionOrderOnApplicationQuit = false,
|
|
SignalSettings signalSettings = null)
|
|
{
|
|
_validationErrorResponse = validationErrorResponse;
|
|
_validationRootResolveMethod = validationRootResolveMethod;
|
|
_displayWarningWhenResolvingDuringInstall = displayWarningWhenResolvingDuringInstall;
|
|
_ensureDeterministicDestructionOrderOnApplicationQuit =ensureDeterministicDestructionOrderOnApplicationQuit;
|
|
_signalSettings = signalSettings ?? SignalSettings.Default;
|
|
}
|
|
|
|
// Need to define an emtpy constructor since this is created by unity serialization
|
|
// even if the above constructor has defaults for all
|
|
public ZenjectSettings()
|
|
: this(ValidationErrorResponses.Log)
|
|
{
|
|
}
|
|
|
|
public SignalSettings Signals
|
|
{
|
|
get { return _signalSettings; }
|
|
}
|
|
|
|
// Setting this to Log can be more useful because it will print out
|
|
// multiple validation errors at once so you can fix multiple problems before
|
|
// attempting validation again
|
|
public ValidationErrorResponses ValidationErrorResponse
|
|
{
|
|
get { return _validationErrorResponse; }
|
|
}
|
|
|
|
// Settings this to true will ensure that every binding in the container can be
|
|
// instantiated with all its dependencies, and not just those bindings that will be
|
|
// constructed as part of the object graph generated from the nonlazy bindings
|
|
public RootResolveMethods ValidationRootResolveMethod
|
|
{
|
|
get { return _validationRootResolveMethod; }
|
|
}
|
|
|
|
public bool DisplayWarningWhenResolvingDuringInstall
|
|
{
|
|
get { return _displayWarningWhenResolvingDuringInstall; }
|
|
}
|
|
|
|
// When this is set to true and the application is exitted, all the scenes will be
|
|
// destroyed in the reverse order in which they were loaded, and then the project context
|
|
// will be destroyed last
|
|
// When this is set to false (the default) the order that this occurs in is not predictable
|
|
// It is set to false by default because manually destroying objects during OnApplicationQuit
|
|
// event can cause crashes on android (see github issue #468)
|
|
public bool EnsureDeterministicDestructionOrderOnApplicationQuit
|
|
{
|
|
get { return _ensureDeterministicDestructionOrderOnApplicationQuit; }
|
|
}
|
|
|
|
[Serializable]
|
|
public class SignalSettings
|
|
{
|
|
public static SignalSettings Default = new SignalSettings();
|
|
|
|
#if !NOT_UNITY3D
|
|
[SerializeField]
|
|
#endif
|
|
SignalDefaultSyncModes _defaultSyncMode;
|
|
|
|
#if !NOT_UNITY3D
|
|
[SerializeField]
|
|
#endif
|
|
SignalMissingHandlerResponses _missingHandlerDefaultResponse;
|
|
|
|
#if !NOT_UNITY3D
|
|
[SerializeField]
|
|
#endif
|
|
bool _requireStrictUnsubscribe;
|
|
|
|
#if !NOT_UNITY3D
|
|
[SerializeField]
|
|
#endif
|
|
int _defaultAsyncTickPriority;
|
|
|
|
public SignalSettings(
|
|
SignalDefaultSyncModes defaultSyncMode,
|
|
SignalMissingHandlerResponses missingHandlerDefaultResponse = SignalMissingHandlerResponses.Warn,
|
|
bool requireStrictUnsubscribe = false,
|
|
// Run right after all the unspecified tick priorities so that the effects of the
|
|
// signal are handled during the same frame when they are triggered
|
|
int defaultAsyncTickPriority = 1)
|
|
{
|
|
_defaultSyncMode = defaultSyncMode;
|
|
_missingHandlerDefaultResponse = missingHandlerDefaultResponse;
|
|
_requireStrictUnsubscribe = requireStrictUnsubscribe;
|
|
_defaultAsyncTickPriority = defaultAsyncTickPriority;
|
|
}
|
|
|
|
// Need to define an emtpy constructor since this is created by unity serialization
|
|
// even if the above constructor has defaults for all
|
|
public SignalSettings()
|
|
: this(SignalDefaultSyncModes.Synchronous)
|
|
{
|
|
}
|
|
|
|
public int DefaultAsyncTickPriority
|
|
{
|
|
get { return _defaultAsyncTickPriority; }
|
|
}
|
|
|
|
public SignalDefaultSyncModes DefaultSyncMode
|
|
{
|
|
get { return _defaultSyncMode; }
|
|
}
|
|
|
|
public SignalMissingHandlerResponses MissingHandlerDefaultResponse
|
|
{
|
|
get { return _missingHandlerDefaultResponse; }
|
|
}
|
|
|
|
public bool RequireStrictUnsubscribe
|
|
{
|
|
get { return _requireStrictUnsubscribe; }
|
|
}
|
|
}
|
|
}
|
|
}
|