public object GetByType(Type type) { if (type == typeof(ILeafUI)) { return(OpenFxLoader.BaseApi.NewLeafUI()); } else if (type.Name.StartsWith(nameof(ILogger))) { return(LoggerFactory.Auto(leafInstance.GetType().Name)); } else if (type == typeof(IDevice)) { return(OpenFxLoader.BaseApi.SelectedDevice); } else if (type == typeof(Dictionary <string, object>)) { return(ExtData); } else if (type == typeof(IEmbeddedFileManager)) { return(new LeafEmb(leafInstance.GetType().Assembly)); } else if (type == typeof(ICommandExecutor)) { return(new HestExecutor()); } else { return(OpenApiFactory.Get(type, leafInstance)); } }
public object GetByType(Type type) { if (type == typeof(ILeafUI)) { return(LakeProvider.Lake.Get <IBaseApi>().NewLeafUI()); } else if (type.Name.StartsWith(nameof(ILogger))) { return(LoggerFactory.Auto(leafInstance.GetType().Name)); } else if (type == typeof(IDevice)) { return(LakeProvider.Lake.Get <IBaseApi>().SelectedDevice); } else if (type == typeof(Dictionary <string, object>)) { return(ExtData); } else if (type == typeof(ICommandExecutor)) { return(new HestExecutor()); } else { return(LakeProvider.Lake.Get(type)); } }
/// <summary> /// 获取信息 /// </summary> /// <param name="leaf"></param> /// <returns></returns> public static IExtInfoGetter GetInformations(this LeafExtensionBase leaf) { var filted = from wrapper in OpenFx.LibsManager.Wrappers() where wrapper.Info.ExtType == leaf.GetType() select wrapper; return(filted.First().Info); }
/// <summary> /// 获取图标数组 /// </summary> /// <param name="leaf"></param> /// <returns></returns> public static string GetName(this LeafExtensionBase leaf) { var filted = from wrapper in OpenFx.LibsManager.Wrappers() where wrapper.Info.ExtType == leaf.GetType() select wrapper; var result = filted.First(); return(result.Info.Name); }
/// <summary> /// 获取图标数组 /// </summary> /// <param name="leaf"></param> /// <returns></returns> public static byte[] GetIconBytes(this LeafExtensionBase leaf) { var filted = from wrapper in OpenFxLoader.LibsManager.Wrappers() where wrapper.Info.ExtType == leaf.GetType() select wrapper; var result = filted.First(); return(result.Info.Icon); }
public void Inject() { var properties = from property in ext.GetType().GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance) where IsInjectableProperty(property) select property; foreach (var prop in properties) { var setter = prop.GetSetMethod() ?? prop.GetSetMethod(true); setter.Invoke(ext, new object[] { apiAllocator.GetByType(prop.PropertyType) }); } }
public void ScanReceiver() { var methods = ext.GetType().GetMethods(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public | BindingFlags.Default); foreach (var method in methods) { var attr = method.GetCustomAttribute(typeof(LSignalReceiveAttribute)); if (attr != null) { wrappers.Add(new ReceiverWrapper(ext, method, (LSignalReceiveAttribute)attr)); } } }
/// <summary> /// 寻找入口点函数 /// </summary> /// <returns></returns> private MethodInfo FindEntry() { var type = ext.GetType(); var methods = from method in type.GetMethods(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) where method.GetCustomAttribute <LDoNotScanAttribute>() == null select method; var result = FindExplicitMain(methods); if (result == null) { return(FindImplicitMain(methods) ?? throw new Exception("Entry not found")); } else { return(result); } }