예제 #1
0
        public static T GetTypeAttribute <T>(this IDotnetExpander expander, object value) where T : Attribute
        {
            string assemblyName, typeName, valueName;

            expander.ParseName(value, out assemblyName, out typeName, out valueName);
            return(expander.GetTypeAttribute <T>(assemblyName, typeName));
        }
예제 #2
0
        public static FieldInfo[] GetFields(this IDotnetExpander expander, string name)
        {
            string assemblyName, typeName, value;

            expander.ParseName(name, out assemblyName, out typeName, out value);
            return(expander.GetFields(assemblyName, typeName));
        }
예제 #3
0
 public static PropertyInfo[] GetSimpleProperties(this IDotnetExpander expander, string assemblyName, string typeName)
 {
     return(Ex.Cache.Read("simpleproperties", assemblyName ?? "", typeName ?? "", "properties", () =>
     {
         return expander.GetProperties(assemblyName, typeName).Where(p => ValueExtensions.IsPrimitive(p.PropertyType)).ToArray();
     }));
 }
예제 #4
0
        public static string GetMemberName(this IDotnetExpander expander, LambdaExpression memberSelector)
        {
            if (memberSelector == null)
            {
                return(null);
            }
            var currentExpression = memberSelector.Body;

            while (true)
            {
                switch (currentExpression.NodeType)
                {
                case ExpressionType.ArrayLength: return("Length");

                case ExpressionType.Parameter: return(((ParameterExpression)currentExpression).Name);

                case ExpressionType.Call: return(((MethodCallExpression)currentExpression).Method.Name);

                case ExpressionType.MemberAccess: return(((MemberExpression)currentExpression).Member.Name);

                case ExpressionType.Convert:
                case ExpressionType.ConvertChecked: currentExpression = ((UnaryExpression)currentExpression).Operand; break;

                case ExpressionType.Invoke: currentExpression = ((InvocationExpression)currentExpression).Expression; break;

                default: return(null);
                }
            }
        }
예제 #5
0
        public static T GetPropertyAttribute <T>(this IDotnetExpander expander, Type type, string propertyName) where T : Attribute
        {
            string assemblyName, typeName;

            expander.ParseName(type, out assemblyName, out typeName);
            return(expander.GetPropertyAttribute <T>(assemblyName, typeName, propertyName));
        }
예제 #6
0
        public static MethodInfo GetMethod(this IDotnetExpander expander, object value, string methodName)
        {
            string assemblyName, typeName, valueName;

            expander.ParseName(value, out assemblyName, out typeName, out valueName);
            return(expander.GetMethod(assemblyName, typeName, methodName));
        }
예제 #7
0
        public static Attribute[] GetFieldAttributes(this IDotnetExpander expander, object value, string fieldName)
        {
            string assemblyName, typeName, valueName;

            expander.ParseName(value, out assemblyName, out typeName, out valueName);
            return(expander.GetFieldAttributes(assemblyName, typeName, fieldName));
        }
예제 #8
0
        public static Attribute[] GetMethodAttributes(this IDotnetExpander expander, Type type, string methodName)
        {
            string assemblyName, typeName;

            expander.ParseName(type, out assemblyName, out typeName);
            return(expander.GetMethodAttributes(assemblyName, typeName, methodName));
        }
예제 #9
0
        public static T GetMethodAttribute <T>(this IDotnetExpander expander, string name, string methodName) where T : Attribute
        {
            string assemblyName, typeName, value;

            expander.ParseName(name, out assemblyName, out typeName, out value);
            return(expander.GetMethodAttribute <T>(assemblyName, typeName, methodName));
        }
예제 #10
0
        public static Type GetType(this IDotnetExpander expander, string name)
        {
            string assemblyName, typeName, value;

            expander.ParseName(name, out assemblyName, out typeName, out value);
            return(expander.GetType(assemblyName, typeName));
        }
예제 #11
0
        public static MethodInfo[] GetMethods(this IDotnetExpander expander, Type type)
        {
            string assemblyName, typeName;

            expander.ParseName(type, out assemblyName, out typeName);
            return(expander.GetMethods(assemblyName, typeName));
        }
예제 #12
0
        public static PropertyInfo[] GetSimpleProperties(this IDotnetExpander expander, string name)
        {
            string assemblyName, typeName, value;

            expander.ParseName(name, out assemblyName, out typeName, out value);
            return(expander.GetSimpleProperties(assemblyName, typeName));
        }
예제 #13
0
        public static Attribute[] GetPropertyAttributes(this IDotnetExpander expander, string name, string propertyName)
        {
            string assemblyName, typeName, value;

            expander.ParseName(name, out assemblyName, out typeName, out value);
            return(expander.GetPropertyAttributes(assemblyName, typeName, propertyName));
        }
예제 #14
0
        public static FieldInfo GetField(this IDotnetExpander expander, Type type, string fieldName)
        {
            string assemblyName, typeName;

            expander.ParseName(type, out assemblyName, out typeName);
            return(expander.GetField(assemblyName, typeName, fieldName));
        }
예제 #15
0
        public static PropertyInfo[] GetSelfProperties(this IDotnetExpander expander, Type type)
        {
            string assemblyName, typeName;

            expander.ParseName(type, out assemblyName, out typeName);
            return(expander.GetSelfProperties(assemblyName, typeName));
        }
예제 #16
0
        public static PropertyInfo GetProperty(this IDotnetExpander expander, Type type, string propertyName)
        {
            string assemblyName, typeName;

            expander.ParseName(type, out assemblyName, out typeName);
            return(expander.GetProperty(assemblyName, typeName, propertyName));
        }
예제 #17
0
        public static void ParseName(this IDotnetExpander expander, string name, out string assemblyName, out string typeName, out string value)
        {
            var names = (name ?? "").Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);

            assemblyName = names.Length > 0 ? names[0] : string.Empty;
            typeName     = names.Length > 1 ? names[1] : string.Empty;
            value        = names.Length > 2 ? names[2] : string.Empty;
        }
예제 #18
0
 public static PropertyInfo[] GetSelfProperties(this IDotnetExpander expander, string assemblyName, string typeName)
 {
     return(Ex.Cache.Read("selfproperties", assemblyName ?? "", typeName ?? "", "properties", () =>
     {
         var type = expander.GetType(assemblyName, typeName);
         return type?.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly) ?? new PropertyInfo[0];
     }));
 }
예제 #19
0
 public static MethodInfo[] GetMethods(this IDotnetExpander expander, string assemblyName, string typeName)
 {
     return(Ex.Cache.Read("methods", assemblyName ?? "", typeName ?? "", () =>
     {
         var type = expander.GetType(assemblyName, typeName);
         return type?.GetMethods(BindingFlags.Instance | BindingFlags.Public) ?? new MethodInfo[0];
     }));
 }
예제 #20
0
 public static FieldInfo[] GetFields(this IDotnetExpander expander, string assemblyName, string typeName)
 {
     return(Ex.Cache.Read("fields", assemblyName ?? "", typeName ?? "", () =>
     {
         var type = expander.GetType(assemblyName, typeName);
         return type == null ? new FieldInfo[0] : (type.IsEnum ? type.GetFields() : type.GetFields(BindingFlags.Instance | BindingFlags.Public));
     }));
 }
예제 #21
0
 public static T GetTypeAttribute <T>(this IDotnetExpander expander, string assemblyName, string typeName) where T : Attribute
 {
     return(Ex.Cache.Read("typeattribute", assemblyName ?? "", typeName ?? "", () =>
     {
         var type = expander.GetType(assemblyName, typeName);
         var customAttributes = type?.GetCustomAttributes(typeof(T), true);
         return customAttributes?.Length > 0 ? customAttributes[0] as T : default(T);
     }));
 }
예제 #22
0
 public static T GetPropertyAttribute <T>(this IDotnetExpander expander, string assemblyName, string typeName, string propertyName) where T : Attribute
 {
     return(Ex.Cache.Read("propertyattribute", assemblyName ?? "", typeName ?? "", propertyName ?? "", () =>
     {
         var propertyInfo = expander.GetProperty(assemblyName, typeName, propertyName);
         var customAttributes = propertyInfo?.GetCustomAttributes(typeof(T), true);
         return customAttributes?.Length > 0 ? customAttributes[0] as T : default(T);
     }));
 }
예제 #23
0
 public static T GetMethodAttribute <T>(this IDotnetExpander expander, string assemblyName, string typeName, string methodName) where T : Attribute
 {
     return(Ex.Cache.Read("methodattribute", assemblyName ?? "", typeName ?? "", methodName ?? "", () =>
     {
         var methodInfo = expander.GetMethod(assemblyName, typeName, methodName);
         var customAttributes = methodInfo.GetCustomAttributes(typeof(T), true);
         return customAttributes.Length > 0 ? customAttributes[0] as T : default(T);
     }));
 }
예제 #24
0
 private static string GetResource(IDotnetExpander expander, string assemblyName, string resourceName, string resourceKey)
 {
     assemblyName = GetAssembly(expander, assemblyName).GetName().Name;
     return(Ex.Cache.Read("resources", (assemblyName ?? string.Empty).ToLower(), (resourceName ?? string.Empty).ToLower(), (resourceKey ?? string.Empty).ToLower(), () =>
     {
         var baseName = $"{assemblyName}.Resx.{resourceName}";
         var rm = GetResourceManager(expander, baseName, assemblyName);
         return GetResource(rm, resourceKey);
     }));
 }
예제 #25
0
        public static string BuildName(this IDotnetExpander expander, object value)
        {
            if (value == null)
            {
                return(string.Empty);
            }
            var type        = value.GetType();
            var stringValue = ValueExtensions.IsPrimitive(type) ? $", {value.As<string>()}" : string.Empty;

            return($"{expander.BuildName(type)}{stringValue}");
        }
예제 #26
0
        public static void ParseName(this IDotnetExpander expander, string metaName, out string assemblyName, out string typeName)
        {
            assemblyName = null;
            typeName     = null;
            if (string.IsNullOrWhiteSpace(metaName))
            {
                return;
            }
            var names = metaName.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries);

            assemblyName = names.Length > 0 ? names[0] : null;
            typeName     = names.Length > 1 ? names[1] : null;
        }
예제 #27
0
        public static object CreateInstance(this IDotnetExpander expander, string name, object[] args = null)
        {
            string assemblyName, typeName, value;

            expander.ParseName(name, out assemblyName, out typeName, out value);
            if (string.IsNullOrWhiteSpace(value))
            {
                return(expander.CreateInstance(assemblyName, typeName, args));
            }
            var type = expander.GetType(assemblyName, typeName);

            return(ValueExtensions.IsPrimitive(type) ? value.As(type) : expander.CreateInstance(assemblyName, typeName, args));
        }
예제 #28
0
 public static object GetConsole(this IDotnetExpander expander, Type type)
 {
     return(Ex.Cache.Read("consolesettings", type.AssemblyQualifiedName, () => {
         var setting = (ExSetting)CreateInstance(expander, type);
         string name;
         setting.IsDeclare = Ex.Cache.Read("commandlinearguments", setting.Code.ToLower(), out name);
         if (setting.IsDeclare)
         {
             setting.Name = name;
         }
         setting.Validate();
         return setting;
     }));
 }
예제 #29
0
 public static object GetResource(this IDotnetExpander expander, Type type)
 {
     return(Ex.Cache.Read("resourcesettings", type.AssemblyQualifiedName, () =>
     {
         var setting = (ExSetting)CreateInstance(expander, type);
         setting.Name = GetSettingValue(setting, setting.Name, GetResourceNames(expander, setting.AssemblyName, setting.Code));
         setting.Description = GetSettingValue(setting, setting.Description, GetResourceDescriptions(expander, setting.AssemblyName, setting.Code));
         setting.Shortcut = GetSettingValue(setting, setting.Shortcut, GetResourceShortcuts(expander, setting.AssemblyName, setting.Code));
         setting.SpecName = GetSettingValue(setting, setting.SpecName, GetResourceSpecifies(expander, setting.AssemblyName, setting.Code));
         setting.Picture = System.Convert.FromBase64String(GetSettingValue(setting, GuiExtensions.GetDefaultImageAsString(), GetResourcePictures(expander, setting.AssemblyName, setting.Code)));
         setting.Validate();
         return setting;
     }));
 }
예제 #30
0
 private static ResourceManager GetResourceManager(IDotnetExpander expander, string baseName, string assemblyName)
 {
     return(Ex.Cache.Read("resourcemanagers", (assemblyName ?? string.Empty).ToLower(), (baseName ?? string.Empty).ToLower(), () =>
     {
         try
         {
             return new ResourceManager(baseName ?? string.Empty, GetAssembly(expander, assemblyName));
         }
         catch
         {
             return null;
         }
     }));
 }