[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,32 @@
using System;
using System.Collections.Concurrent;
using System.Reflection;
namespace VContainer.Internal
{
public static class InjectorCache
{
static readonly ConcurrentDictionary<Type, IInjector> Injectors = new ConcurrentDictionary<Type, IInjector>();
public static IInjector GetOrBuild(Type type)
{
return Injectors.GetOrAdd(type, key =>
{
// SourceGenerator
var generatedType = key.Assembly.GetType($"{key.FullName}GeneratedInjector", false);
if (generatedType != null)
{
return (IInjector)Activator.CreateInstance(generatedType);
}
// IL weaving (Deprecated)
var getter = key.GetMethod("__GetGeneratedInjector", BindingFlags.Static | BindingFlags.Public);
if (getter != null)
{
return (IInjector)getter.Invoke(null, null);
}
return ReflectionInjector.Build(key);
});
}
}
}