48 lines
1.4 KiB
C#
48 lines
1.4 KiB
C#
using Reflex.Caching;
|
|
using Reflex.Core;
|
|
|
|
using System.Runtime.CompilerServices;
|
|
|
|
namespace Reflex.Injectors
|
|
{
|
|
public static class AttributeInjector
|
|
{
|
|
public static void Inject(object obj, Container container)
|
|
{
|
|
if (obj is IAttributeInjectionContract contract)
|
|
{
|
|
Inject(contract, container);
|
|
return;
|
|
}
|
|
|
|
var info = TypeInfoCache.Get(obj.GetType());
|
|
|
|
var fields = info.InjectableFields;
|
|
var fieldCount = fields.Length;
|
|
for (var i = 0; i < fieldCount; i++)
|
|
{
|
|
FieldInjector.Inject(fields[i], obj, container);
|
|
}
|
|
|
|
var properties = info.InjectableProperties;
|
|
var propertyCount = properties.Length;
|
|
for (var i = 0; i < propertyCount; i++)
|
|
{
|
|
PropertyInjector.Inject(properties[i], obj, container);
|
|
}
|
|
|
|
var methods = info.InjectableMethods;
|
|
var methodCount = methods.Length;
|
|
for (var i = 0; i < methodCount; i++)
|
|
{
|
|
MethodInjector.Inject(methods[i], obj, container);
|
|
}
|
|
}
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static void Inject(IAttributeInjectionContract contract, Container container)
|
|
{
|
|
contract.ReflexInject(container);
|
|
}
|
|
}
|
|
} |