Net.Like.Xue.Tokyo/Assets/BITKit/Core/ECS/Entity.cs

44 lines
1.4 KiB
C#
Raw Normal View History

2024-11-03 16:42:23 +08:00
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using Microsoft.Extensions.DependencyInjection;
namespace BITKit.Entities
{
public class Entity : IEntity, IDisposable
{
public Entity()
{
ServiceCollection.AddSingleton<IEntity>(this);
}
public void WaitForInitializationComplete()
{
throw new NotImplementedException();
}
public int Id { get; set; } = Guid.NewGuid().GetHashCode();
2025-03-03 18:44:00 +08:00
public CancellationToken CancellationToken { get; set; }
2024-11-03 16:42:23 +08:00
2024-11-13 17:47:45 +08:00
public IServiceProvider ServiceProvider => _serviceProvider ??= ServiceCollection.BuildServiceProvider();
private ServiceProvider _serviceProvider;
2024-11-03 16:42:23 +08:00
public IServiceCollection ServiceCollection { get; } = new ServiceCollection();
2024-11-13 17:47:45 +08:00
public object[] GetServices() => ServiceCollection.ToArray()
.Select(x => _serviceProvider.GetService(x.ServiceType)).ToArray();
2024-11-03 16:42:23 +08:00
public void Inject(object obj)
{
foreach (var fieldInfo in obj.GetType().GetFields(ReflectionHelper.Flags))
{
if (Attribute.IsDefined(fieldInfo, typeof(InjectAttribute)))
{
fieldInfo.SetValue(obj, ServiceProvider.GetService(fieldInfo.FieldType));
}
}
}
public void Dispose()
{
2024-11-13 17:47:45 +08:00
_serviceProvider.Dispose();
2024-11-03 16:42:23 +08:00
}
}
}