TOC: - what GodotDI offers (in short): - logging - configuration - possibility to attach extra DI-based services like telemetry) - minimal description of what problems DI tackles - minimal example with logging, configuration, decoupling of components - how to install - creation of the root service source - example - scopes - why - definition - deep dive into why it's all done at composition root - using extension methods to split the code as necessary - sending data into a scope - initializing data in the scope NOTES field with \[Inject\] or method with \[Inject\] automatically receive injection IF they are between the injected objects of a ServiceSource a method with \[WithProvider\] generates a companion method for unwrapping provider. E.g.: ```csharp [WithProvider] private void OnReady(IService1 service1, IService2 service2) { // ... } ``` will generate a companion method similar to: ```csharp private void OnReadyWithProvider(IProvider provider) { OnReady( provider.Get(), provider.Get() ); } ```