Files
dungeons/Assets/Plugins/Zenject/Source/Main/ZenjectSettings.cs

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; }
}
}
}
}