Usage.Native CSharp Projects - JuDelCo/Core GitHub Wiki
Service Container Lifecycle
In native C# applications, you need to ensure the lifecycle of the Service Container and fire some events (this is all handled by the Unity Service in Unity projects).
Start
At some point in the entry point of the logic of your program, register the services using:
ServiceContainer.RegisterService<ITaskService, TaskService>();
ServiceContainer.RegisterService<ICoroutineService, CoroutineService>();
ServiceContainer.RegisterService<ICacheService, CacheService>();
// Note: You need to implement your custom C# native providers for these services if you need to use them
// ServiceContainer.RegisterService<ILogService, LogConsoleService>();
// ServiceContainer.RegisterService<IInputService, InputUnityService>();
// ServiceContainer.RegisterService<ITimeService, UnityTimeService>();
// Register your custom services
Note: The IEventBusService
is core and therefore is registered automatically, you can't unload this service.
Read more on how to use the Service Container here.
Update loop
During the update loop of your application you need to fire events so some Services that depends on them (like the Coroutine and Task services) work as intended:
// Update loop
ServiceContainer.Get<IEventBusService>().Fire(new TimePreUpdateEvent(deltaTime));
ServiceContainer.Get<IEventBusService>().Fire(new TimeUpdateEvent(deltaTime));
ServiceContainer.Get<IEventBusService>().Fire(new TimePostUpdateEvent(deltaTime));
// Fixed update loop
ServiceContainer.Get<IEventBusService>().Fire(new TimePreFixedUpdateEvent(fixedDeltaTime));
ServiceContainer.Get<IEventBusService>().Fire(new TimeFixedUpdateEvent(fixedDeltaTime));
ServiceContainer.Get<IEventBusService>().Fire(new TimePostFixedUpdateEvent(fixedDeltaTime));
// others ... (physics events)
Dispose
Before the program finalizes, you should dispose all the services using:
ServiceContainer.Dispose();