feat: automatic injection of elements in scene.

This commit is contained in:
redglow
2026-07-17 15:14:40 +02:00
parent 659baff30c
commit 5ad3af84b2
15 changed files with 86 additions and 219 deletions
+10 -5
View File
@@ -9,17 +9,22 @@ namespace GodotHostTest.GodotDI;
[Icon("res://addons/GodotDI/ServiceSource.svg")]
public partial class ServiceSource : Node
{
[Export] private string _serviceScope = typeof(RootScope).AssemblyQualifiedName!;
private static readonly string RootScopeQualifiedName = typeof(RootScope).AssemblyQualifiedName!;
[Export] private string _serviceScope = RootScopeQualifiedName;
[Export] protected Node?[] InjectedNodes = [];
internal void ResolveInjectedNodes(IServiceProvider serviceProvider)
{
// if this service source must also act as a scope, create the scope and use its service provider
if (_serviceScope != "")
if (_serviceScope != RootScopeQualifiedName)
{
serviceProvider = serviceProvider
.CreateScope()
.ServiceProvider;
var serviceProviderCreator = serviceProvider.GetRequiredService<Func<IProvider, IServiceProvider>>();
var scopedProvider = serviceProvider.GetRequiredService<IProvider>()
.GetScopedProvider(ScopeTypesAndNames.GetType(_serviceScope));
serviceProvider = serviceProviderCreator(scopedProvider);
// serviceProvider = serviceProvider
// .CreateScope()
// .ServiceProvider;
}
// resolve the injected nodes against the chosen service provider