补充了Library的注释

This commit is contained in:
fengjiayi
2024-10-11 19:31:34 +08:00
parent aa85c907a3
commit 5bef0d9b57
27 changed files with 202 additions and 239 deletions

View File

@@ -7,6 +7,9 @@ using System.Threading.Tasks;
namespace Serein.Library.Utils
{
/// <summary>
/// 类型转换工具类
/// </summary>
public static class ConvertHelper
{
public static TResult ToConvert<TResult>(this object data)

View File

@@ -8,12 +8,24 @@ using System.Threading.Tasks;
namespace Serein.Library.Utils
{
/// <summary>
/// Emit创建委托工具类
/// </summary>
public class EmitHelper
{
public enum EmitMethodType
{
/// <summary>
/// 普通的方法。如果方法返回void时将会返回null。
/// </summary>
Func,
/// <summary>
/// 无返回值的异步方法
/// </summary>
Task,
/// <summary>
/// 有返回值的异步方法
/// </summary>
HasResultTask,
}
public static bool IsGenericTask(Type returnType, out Type taskResult)
@@ -38,11 +50,6 @@ namespace Serein.Library.Utils
}
}
//public static Delegate CreateDynamicMethod<T>(MethodInfo methodInfo)
//{
// return CreateDynamicMethod(methodInfo);
//}
public static EmitMethodType CreateDynamicMethod( MethodInfo methodInfo,out Delegate @delegate)
{
bool IsTask = IsGenericTask(methodInfo.ReturnType, out var taskGenericsType);

View File

@@ -6,11 +6,22 @@ using System.Text;
namespace Serein.Library.Utils
{
/// <summary>
/// 枚举工具类,用于枚举转换器
/// </summary>
public static class EnumHelper
{
public static bool TryConvertEnum<T>(this string value, out T result) where T : struct, Enum
/// <summary>
/// 将字符串的字面量枚举值,转为对应的枚举值
/// </summary>
/// <typeparam name="TEnum">枚举</typeparam>
/// <param name="value">枚举字面量</param>
/// <param name="result">返回的枚举值</param>
/// <returns>是否转换成功</returns>
public static bool TryConvertEnum<TEnum>(this string value, out TEnum result) where TEnum : struct, Enum
{
if (!string.IsNullOrEmpty(value) && Enum.TryParse(value, true, out T tempResult) && Enum.IsDefined(typeof(T), tempResult))
if (!string.IsNullOrEmpty(value) && Enum.TryParse(value, true, out TEnum tempResult) && Enum.IsDefined(typeof(TEnum), tempResult))
{
result = tempResult;
return true;
@@ -18,6 +29,15 @@ namespace Serein.Library.Utils
result = default;
return false;
}
/// <summary>
/// 从枚举值的 BindValueAttribute 特性中 获取绑定的参数(用于绑定了某些内容的枚举值)
/// </summary>
/// <typeparam name="TEnum">枚举类型</typeparam>
/// <typeparam name="TResult">返回类型</typeparam>
/// <param name="enumValue">枚举值</param>
/// <param name="valueSelector">选择什么参数</param>
/// <returns></returns>
public static TResult GetBoundValue<TEnum, TResult>(TEnum enumValue, Func<BindValueAttribute, object> valueSelector)
where TEnum : Enum
{
@@ -26,6 +46,7 @@ namespace Serein.Library.Utils
return attribute != null ? (TResult)valueSelector(attribute) : default;
}
public static object GetBoundValue(Type enumType,object enumValue, Func<BindValueAttribute, object> valueSelector)
{
var fieldInfo = enumType.GetField(enumValue.ToString());
@@ -34,6 +55,16 @@ namespace Serein.Library.Utils
return attribute != null ? valueSelector(attribute) : default;
}
/// <summary>
/// 从枚举值从获取自定义特性的成员,并自动转换类型
/// </summary>
/// <typeparam name="TEnum">枚举类型</typeparam>
/// <typeparam name="TAttribute">自定义特性类型</typeparam>
/// <typeparam name="TResult">返回类型</typeparam>
/// <param name="enumValue">枚举值</param>
/// <param name="valueSelector">特性成员选择</param>
/// <returns></returns>
public static TResult GetBoundValue<TEnum, TAttribute, TResult>(TEnum enumValue,
Func<TAttribute, TResult> valueSelector)
where TEnum : Enum

View File

@@ -10,7 +10,7 @@ using System.Threading.Tasks;
namespace Serein.Library.Utils
{
/// <summary>
/// 基于类型创建表达式树反射委托
/// 基于类型创建表达式树反射委托目前已使用EmitHelper代替
/// </summary>
public static class ExpressionHelper
{

View File

@@ -117,20 +117,21 @@ namespace Serein.Library.Utils
/// <param name="key"></param>
/// <param name="instance"></param>
/// <param name="needInjectProperty"></param>
public void CustomRegisterInstance(string key, object instance, bool needInjectProperty = true)
public bool CustomRegisterInstance(string key, object instance, bool needInjectProperty = true)
{
// 不存在时才允许创建
if (!_dependencies.ContainsKey(key))
if (_dependencies.ContainsKey(key))
{
_dependencies.TryAdd(key, instance);
return false;
}
_dependencies.TryAdd(key, instance);
if (needInjectProperty)
{
InjectDependencies(instance); // 注入实例需要的依赖项
}
InjectUnfinishedDependencies(key, instance); // 检查是否存在其它实例需要该类型
OnIOCMembersChanged?.Invoke(new IOCMembersChangedEventArgs(key, instance));
return true;
}
public object Get(Type type)
{