示例#1
0
 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));
     }
 }
示例#2
0
 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));
     }
 }
示例#3
0
        /// <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);
        }
示例#4
0
        /// <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);
        }
示例#5
0
        /// <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);
        }
示例#6
0
        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) });
            }
        }
示例#7
0
        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));
                }
            }
        }
示例#8
0
        /// <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);
            }
        }