Plain C# Entry point
VContainer allows plain C# to be the starting point for application processing. Using it instead of MonoBehaviour, which has a lot of features, can help you build a simple control flow.
See register
VContainer does this with its own PlayerLoopSystem.
If you register a class that implements the marker interface, it will be scheduled in Unity's PlayerLoop cycle.
Since it uses PlayerLoopSystem, it works even if you register at any time (e.g: IStartable etc)
Available interfaces#
| VContaienr entry point | Timing |
|---|---|
IInitializable.Initialize() | Early PlayerLoop.Initialization |
IPostInitializable.PostInitialize() | Late PlayerLoop.Initialization |
IStartable.Start() | Nearly MonoBehaviour.Start() |
IPostStartable.PostStart() | After MonoBehaviour.Start() |
IFixedTickable.FixedTick() | Nearly MonoBehaviour.FixedUpdate() |
IPostFixedTickable.PostFixedTick() | After MonoBehaviour.FixedUpdate() |
ITickable.Tick() | Nearly MonoBehaviour.Update() |
IPostTickable.PostTick() | After MonoBehaviour.Update() |
ILateTickable.LateTick() | Nearly MonoBehaviour.LateUpdate() |
IPostLateTickable.LateTick() | After MonoBehaviour.LateUpdate() |
And
IDisposable: With container disposes. (ForLifetime.Singleton/Lifetime.Scoped)

Handle of the exception that was not caught#
On the application side, exceptions thrown in processes such as Start() and Tick() cannot be caught outside.
By default, VContainer logs unhandled exceptions as UnityEngine.Debug.LogException.
As another option, you can register a callback for each LifetimeScope.
caution
Default error logging will be skipped if you are using the RegisterEntryPointExceptionHandler.
UniTask#
If you are using UniTask, you can use IAsyncStartable. see also UniTask Integration