Best practice: Dependency injection
This section explains how to follow best practices when using the Digital Twin SDKs.
Overview
The Digital Twin SDKs have APIs that follow the dependency injection pattern, which means each service constructor requires you to provide dependencies based on your preferences.
This pattern is useful for advanced use cases because it simplifies the customization of specific components and uses the default implementation for the remaining components. You can use the default implementations for simple usage, but you must link the services together.
The samples and documentation for Identity use a best practice pattern and this section explains how that best practice pattern works.
Implement the PlatformServices pattern
Create a
PlatformServices
static class withInitializeAsync
andShutdown
methods. This class initializes and disposes of all Digital Twin services, while also publicly exposing the services as singletons.public static class PlatformServices { public static async Task InitializeAsync() { } public static void Shutdown() { } }
Create a
PlatformServicesInitialization
MonoBehaviour that calls thePlatformService
'sInitializeAsync
inAwake
. TheDefaultExecutionOrder
attribute ensures this script is called before any other script in your project andDontDestroyOnLoad
ensures the GameObject isn't destroyed when loading another scene.[DefaultExecutionOrder(int.MinValue)] public class PlatformServicesInitialization : MonoBehaviour { async Task Awake() { DontDestroyOnLoad(gameObject); await PlatformServices.InitializeAsync(); } }
Create a
PlatformServicesShutdown
MonoBehavior that calls thePlatformService
'sShutdown
inOnDestroy
. TheDefaultExecutionOrder
attribute ensures this script is called after any other script in your project.[DefaultExecutionOrder(int.MaxValue)] public class PlatformServicesShutdown : MonoBehaviour { void OnDestroy() { PlatformServices.Shutdown(); } }
Create a
PlatformServices
GameObject and attach thePlatformServicesInitialization
andPlatformServicesShutdown
scripts. Make sure this GameObject instantiates only once in your project, which is when the application launches.- Populate the
PlatformServices
class with the services you require.