[Add] VContainer

This commit is contained in:
2026-04-07 04:51:37 +07:00
parent 76562726ec
commit 4f9b878775
193 changed files with 8036 additions and 0 deletions
@@ -0,0 +1,44 @@
using System.Collections.Generic;
using System.Runtime.CompilerServices;
namespace VContainer.Unity
{
sealed class ExistingComponentProvider : IInstanceProvider
{
readonly object instance;
readonly IInjector injector;
readonly IReadOnlyList<IInjectParameter> customParameters;
readonly bool dontDestroyOnLoad;
public ExistingComponentProvider(
object instance,
IInjector injector,
IReadOnlyList<IInjectParameter> customParameters,
bool dontDestroyOnLoad = false)
{
this.instance = instance;
this.customParameters = customParameters;
this.injector = injector;
this.dontDestroyOnLoad = dontDestroyOnLoad;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public object SpawnInstance(IObjectResolver resolver)
{
injector.Inject(instance, resolver, customParameters);
if (dontDestroyOnLoad)
{
if (instance is UnityEngine.Object component)
{
UnityEngine.Object.DontDestroyOnLoad(component);
}
else
{
throw new VContainerException(instance.GetType(),
$"Cannot apply `DontDestroyOnLoad`. {instance.GetType().Name} is not a UnityEngine.Object");
}
}
return instance;
}
}
}