154 lines
5.6 KiB
C#
154 lines
5.6 KiB
C#
using System.Threading;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel.Design;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
#if NET5_0_OR_GREATER
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
#endif
|
|
namespace BITKit.Entities
|
|
{
|
|
/// <summary>
|
|
/// 基本实体
|
|
/// </summary>
|
|
public interface IEntity
|
|
{
|
|
int Id { get; }
|
|
CancellationToken CancellationToken { get; }
|
|
IServiceProvider ServiceProvider { get; }
|
|
IServiceCollection ServiceCollection { get; }
|
|
void Inject(object obj);
|
|
|
|
}
|
|
/// <summary>
|
|
/// 基本实体服务
|
|
/// </summary>
|
|
public interface IEntitiesService
|
|
{
|
|
/// <summary>
|
|
/// 当添加Entity时
|
|
/// </summary>
|
|
public event Action<IEntity> OnAdd;
|
|
/// <summary>
|
|
/// 当移除Entity时
|
|
/// </summary>
|
|
public event Action<IEntity> OnRemove;
|
|
/// <summary>
|
|
/// 所有Entity
|
|
/// </summary>
|
|
IReadOnlyDictionary<int,IEntity> Entities { get; }
|
|
/// <summary>
|
|
/// 注册Entity
|
|
/// </summary>
|
|
/// <param name="entity"></param>
|
|
/// <returns></returns>
|
|
bool Register(IEntity entity);
|
|
/// <summary>
|
|
/// 注销Entity
|
|
/// </summary>
|
|
/// <param name="entity"></param>
|
|
/// <returns></returns>
|
|
bool UnRegister(IEntity entity);
|
|
CancellationToken CancellationToken { get; }
|
|
/// <summary>
|
|
/// 通过Id获取Entity
|
|
/// </summary>
|
|
/// <param name="id"></param>
|
|
/// <returns></returns>
|
|
IEntity Get(int id);
|
|
/// <summary>
|
|
/// 尝试通过Id获取Entity
|
|
/// </summary>
|
|
/// <param name="id"></param>
|
|
/// <param name="entity"></param>
|
|
/// <returns></returns>
|
|
bool TryGetEntity(int id, out IEntity entity);
|
|
/// <summary>
|
|
/// 通过Id获取或添加Entity
|
|
/// </summary>
|
|
IEntity GetOrAdd(int id,Func<int,IEntity> factory);
|
|
|
|
/// <summary>
|
|
/// 查询1个组件
|
|
/// </summary>
|
|
/// <typeparam name="T"></typeparam>
|
|
/// <returns></returns>
|
|
Span<T> QueryComponents<T>() where T : class;
|
|
|
|
/// <summary>
|
|
/// 查询2个组件
|
|
/// </summary>
|
|
/// <typeparam name="T"></typeparam>
|
|
/// <typeparam name="T1"></typeparam>
|
|
/// <returns></returns>
|
|
Span<ValueTuple<T, T1>> QueryComponents<T, T1>() where T : class where T1 : class;
|
|
|
|
/// <summary>
|
|
/// 查询3个组件
|
|
/// </summary>
|
|
/// <typeparam name="T"></typeparam>
|
|
/// <typeparam name="T1"></typeparam>
|
|
/// <typeparam name="T2"></typeparam>
|
|
/// <returns></returns>
|
|
Span<ValueTuple<T, T1, T2>> QueryComponents<T, T1, T2>() where T : class where T1 : class where T2 : class;
|
|
|
|
/// <summary>
|
|
/// 查询4个组件
|
|
/// </summary>
|
|
/// <typeparam name="T"></typeparam>
|
|
/// <typeparam name="T1"></typeparam>
|
|
/// <typeparam name="T2"></typeparam>
|
|
/// <typeparam name="T3"></typeparam>
|
|
/// <returns></returns>
|
|
Span<ValueTuple<T, T1, T2, T3>> QueryComponents<T, T1, T2, T3>() where T : class where T1 : class where T2 : class where T3:class;
|
|
|
|
/// <summary>
|
|
/// 查询5个组件
|
|
/// </summary>
|
|
/// <typeparam name="T"></typeparam>
|
|
/// <typeparam name="T1"></typeparam>
|
|
/// <typeparam name="T2"></typeparam>
|
|
/// <typeparam name="T3"></typeparam>
|
|
/// <typeparam name="T4"></typeparam>
|
|
/// <returns></returns>
|
|
Span<ValueTuple<T, T1, T2, T3, T4>> QueryComponents<T, T1, T2, T3, T4>()where T : class where T1 : class where T2 : class where T3:class where T4:class;
|
|
/// <summary>
|
|
/// 查询6个组件
|
|
/// </summary>
|
|
/// <typeparam name="T"></typeparam>
|
|
/// <typeparam name="T1"></typeparam>
|
|
/// <typeparam name="T2"></typeparam>
|
|
/// <typeparam name="T3"></typeparam>
|
|
/// <typeparam name="T4"></typeparam>
|
|
/// <typeparam name="T5"></typeparam>
|
|
/// <returns></returns>
|
|
Span<ValueTuple<T, T1, T2, T3, T4, T5>> QueryComponents<T, T1, T2, T3, T4, T5>()where T : class where T1 : class where T2 : class where T3:class where T4:class where T5 : class;
|
|
|
|
/// <summary>
|
|
/// 查询7个组件
|
|
/// </summary>
|
|
/// <typeparam name="T"></typeparam>
|
|
/// <typeparam name="T1"></typeparam>
|
|
/// <typeparam name="T2"></typeparam>
|
|
/// <typeparam name="T3"></typeparam>
|
|
/// <typeparam name="T4"></typeparam>
|
|
/// <typeparam name="T5"></typeparam>
|
|
/// <typeparam name="T6"></typeparam>
|
|
/// <returns></returns>
|
|
Span<ValueTuple<T, T1, T2, T3, T4, T5, T6>> QueryComponents<T, T1, T2, T3, T4, T5, T6>()where T : class where T1 : class where T2 : class where T3:class where T4:class where T5 : class where T6 :class;
|
|
|
|
/// <summary>
|
|
/// 查询8个组件
|
|
/// </summary>
|
|
/// <typeparam name="T"></typeparam>
|
|
/// <typeparam name="T1"></typeparam>
|
|
/// <typeparam name="T2"></typeparam>
|
|
/// <typeparam name="T3"></typeparam>
|
|
/// <typeparam name="T4"></typeparam>
|
|
/// <typeparam name="T5"></typeparam>
|
|
/// <typeparam name="T6"></typeparam>
|
|
/// <typeparam name="TRest">剩余实例</typeparam>
|
|
/// <returns></returns>
|
|
//Span<ValueTuple<T, T1, T2, T3, T4, T5, T6, TRest>> QueryComponents<T, T1, T2, T3, T4, T5, T6, TRest>() where TRest : struct;
|
|
}
|
|
} |