45 lines
1.5 KiB
C#
Raw Normal View History

2025-09-19 19:43:49 +05:00
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;
}
}
}