コード例 #1
0
ファイル: DbDriverFactory.cs プロジェクト: pigeon79/GCore
        private static DbDriver CreateDbDriver(DbDialect dialectClass, string name, string driverClassName,
                                               string connectionString, string dbProviderFactoryName, string act, string auto)
        {
            var autoScheme = AutoScheme.None;

            if (auto.IsNullOrEmpty())
            {
                if (!string.IsNullOrEmpty(act))
                {
                    if (bool.Parse(act))
                    {
                        autoScheme = AutoScheme.CreateTable;
                    }
                }
            }
            else
            {
                autoScheme = (AutoScheme)Enum.Parse(typeof(AutoScheme), auto);
            }
            CheckProperty(dialectClass, connectionString);
            if (driverClassName == "")
            {
                return(dialectClass.CreateDbDriver(name, connectionString, dbProviderFactoryName, autoScheme));
            }
            return((DbDriver)ClassHelper.CreateInstance(driverClassName,
                                                        dialectClass, name, connectionString, dbProviderFactoryName, autoScheme));
        }
コード例 #2
0
        public override object Deserialize(IDictionary <string, object> dictionary, Type type, JavaScriptSerializer serializer)
        {
            IList list = ClassHelper.CreateListInstance(type);

            foreach (object obj in dictionary.Values)
            {
                var items = obj as IEnumerable <KeyValuePair <string, object> >;
                if (items == null || !items.Any())
                {
                    continue;
                }
                object model = ClassHelper.CreateInstance(type);
                foreach (var item in items)
                {
                    KeyValuePair <string, object> detail = (KeyValuePair <string, object>)item;
                    string       name         = detail.Key;
                    PropertyInfo propertyInfo = type.GetProperty(name);
                    if (string.IsNullOrEmpty(name) || propertyInfo == null)
                    {
                        continue;
                    }
                    //ClassHelper.SetPropertyValue(model, name, detail.Value);
                    propertyInfo.SetValue(model, SafeConverter.SafeToObject(propertyInfo.PropertyType, detail.Value), null);
                }
                list.Add(model);
            }
            return(list);
        }
コード例 #3
0
        public DataSet ExecuteDataset(SqlStatement sql, Type returnType)
        {
            var ds = (DataSet)ClassHelper.CreateInstance(returnType);

            ExecuteDataset(sql, ds);
            return(ds);
        }
コード例 #4
0
ファイル: DbDriverFactory.cs プロジェクト: pigeon79/GCore
        private static DbDriver GetDriver(string prefix)
        {
            var name = prefix;

            if (prefix != "")
            {
                prefix += ".";
            }
            string pd = prefix + "DataBase";
            string ds = ConfigHelper.GSettings.GetValue(pd);

            if (ds == "")
            {
                throw new SettingException("DataBase must be set as a valid value. Current get is : " + pd);
            }
            string[] ss = StringHelper.Split(ds, ':', 2);
            ds = ss[0].Trim();
            if (ds[0] == '@')
            {
                ds = "G.Data.Dialect." + ds.Substring(1) + ", G.Data";
            }
            var    d    = (DbDialect)ClassHelper.CreateInstance(ds);
            string cs   = d.GetConnectionString(ss[1].Trim());
            string pf   = ConfigHelper.GSettings.GetValue(prefix + "DbProviderFactory");
            string dcn  = ConfigHelper.GSettings.GetValue(prefix + "DbDriver");
            string act  = ConfigHelper.GSettings.GetValue(prefix + "AutoCreateTable");
            string auto = ConfigHelper.GSettings.GetValue(prefix + "AutoScheme");

            return(CreateDbDriver(d, name, dcn, cs, pf, act, auto));
        }
コード例 #5
0
ファイル: ModelContext.cs プロジェクト: leohsu91/DbEntry
        public IDbObjectHandler CreateDbObjectHandler()
        {
            if (Info.HandleType.IsGenericType)
            {
                switch (Info.HandleType.Name)
                {
                case "GroupByObject`1":
                    var t = typeof(GroupbyObjectHandler <>).MakeGenericType(Info.HandleType.GetGenericArguments());
                    return((IDbObjectHandler)ClassHelper.CreateInstance(t));

                case "GroupBySumObject`2":
                    var ts = typeof(GroupbySumObjectHandler <,>).MakeGenericType(Info.HandleType.GetGenericArguments());
                    return((IDbObjectHandler)ClassHelper.CreateInstance(ts));

                default:
                    throw new NotSupportedException();
                }
            }
            var attr = Info.HandleType.GetAttribute <InstanceHandlerAttribute>(false);

            if (attr != null)
            {
                var o = (EmitObjectHandlerBase)ClassHelper.CreateInstance(attr.Type);
                o.Init(Info);
                return(o);
            }
            throw new ModelException(Info.HandleType, "Can not find ObjectHandler. REF: http://dbentry.codeplex.com/wikipage?title=Setup");
        }
コード例 #6
0
ファイル: AssemblyHandler.cs プロジェクト: zyj0021/DbEntry
        public virtual IDbObjectHandler CreateDbObjectHandler(Type srcType, ObjectInfo oi)
        {
            Type t = GetDbObjectHandler(srcType, oi);
            var  o = (EmitObjectHandlerBase)ClassHelper.CreateInstance(t);

            o.Init(oi);
            return(o);
        }
コード例 #7
0
    private static object GetValue(Dictionary <string, string> map, string key, Type objType)
    {
        string s = GetString(map, key);

        if (string.IsNullOrEmpty(s))
        {
            return(ClassHelper.CreateInstance(objType));
        }
        return(ClassHelper.CreateInstance(s));
    }
コード例 #8
0
ファイル: ConfigHelperBase.cs プロジェクト: zyj0021/DbEntry
        public object GetValue(string key, Type objType)
        {
            string s = GetString(key);

            if (string.IsNullOrEmpty(s))
            {
                return(ClassHelper.CreateInstance(objType));
            }
            return(ClassHelper.CreateInstance(s));
        }
コード例 #9
0
 static NameMapper()
 {
     if (CoreSettings.NameMapper.StartsWith("@"))
     {
         Instance = SimpleContainer.Get <NameMapper>(CoreSettings.NameMapper.Substring(1));
     }
     else
     {
         Instance = (NameMapper)ClassHelper.CreateInstance(CoreSettings.NameMapper);
     }
 }
コード例 #10
0
 public static void CopyAll(Assembly assembly)
 {
     foreach (Type t in assembly.GetTypes())
     {
         if (t.BaseType == typeof(BulkCopyProcessor))
         {
             var o = (BulkCopyProcessor)ClassHelper.CreateInstance(t);
             o.Run();
         }
     }
 }
コード例 #11
0
        static NameMapper()
        {
            var nameMapper = ConfigReader.Config.Database.NameMapper;

            if (nameMapper.StartsWith("@"))
            {
                Instance = SimpleContainer.Get <NameMapper>(nameMapper.Substring(1));
            }
            else
            {
                Instance = (NameMapper)ClassHelper.CreateInstance(nameMapper);
            }
        }
コード例 #12
0
 public FieldAdapter(FieldInfo info)
 {
     this.Info = info;
     if (info.IsPublic)
     {
         var t = MemberHandlerGenerator.Generate(info.DeclaringType, info);
         Handler = (IMemberHandler)ClassHelper.CreateInstance(t);
     }
     else
     {
         Handler = new FieldHandler(info);
     }
 }
コード例 #13
0
ファイル: DbDriverFactory.cs プロジェクト: sfltd/DbEntry
        private static DbDriver CreateDbDriver(DbDialect dialectClass, string name, string driverClassName,
                                               string connectionString, string dbProviderFactoryName, string das)
        {
            var autoScheme = das.ToEnum <AutoScheme>();

            CheckProperty(dialectClass, connectionString);
            if (driverClassName == "")
            {
                return(dialectClass.CreateDbDriver(name, connectionString, dbProviderFactoryName, autoScheme));
            }
            return((DbDriver)ClassHelper.CreateInstance(driverClassName,
                                                        dialectClass, name, connectionString, dbProviderFactoryName, autoScheme));
        }
コード例 #14
0
        public PropertyAdapter(PropertyInfo info)
        {
            this.Info = info;
            var method = info.GetGetMethod();

            if (method != null && method.IsPublic)
            {
                var t = MemberHandlerGenerator.Generate(info.DeclaringType, info);
                Handler = (IMemberHandler)ClassHelper.CreateInstance(t);
            }
            else
            {
                Handler = new PropertyHandler(info);
            }
        }
コード例 #15
0
        protected DynamicObjectReference(SerializationInfo info, StreamingContext context)
        {
            var    t = (Type)info.GetValue("#", typeof(Type));
            object o = ClassHelper.CreateInstance(t);

            foreach (FieldInfo fi in t.GetFields(ClassHelper.InstanceFlag))
            {
                object v = info.GetValue(fi.Name, fi.FieldType);
                fi.SetValue(o, v);
            }
            if (o is DbObjectSmartUpdate) // should be DbObjectModel<T, TKey>
            {
                var pi = t.GetProperty("Id");
                pi.SetValue(o, info.GetValue("Id", pi.PropertyType), new object[] {});
            }
            RealObj = o;
        }
コード例 #16
0
ファイル: LogRecorderProvider.cs プロジェクト: sfltd/DbEntry
 public static ILogRecorder GetLogRecorder(string name)
 {
     lock (Jar) {
         if (Jar.ContainsKey(name))
         {
             return(Jar[name]);
         }
         var ilc = name.StartsWith("@")
             ? SimpleContainer.Get <ILogRecorder>(name.Substring(1))
             : (ILogRecorder)ClassHelper.CreateInstance(name);
         if (ilc == null)
         {
             throw new SettingException();
         }
         Jar[name] = ilc;
         return(ilc);
     }
 }
コード例 #17
0
        public FieldAdapter(FieldInfo info)
        {
            this.Info = info;
            var attr = info.GetAttribute <InstanceHandlerAttribute>(false);

            if (attr != null)
            {
                var h = ClassHelper.CreateInstance(attr.Type);
                if (h is IMemberHandler)
                {
                    Handler = (IMemberHandler)h;
                }
            }
            if (Handler == null)
            {
                Handler = new FieldHandler(info);
            }
        }
コード例 #18
0
        public override System.Collections.IEnumerable GetDesignTimeData(int minimumRows, out bool isSampleData)
        {
            isSampleData = true;

            var list = new List <object>();

            for (int i = 0; i < minimumRows; i++)
            {
                object obj = ClassHelper.CreateInstance(_info.HandleType);
                foreach (MemberHandler mh in _info.SimpleMembers)
                {
                    object value = GetSampleValue(mh.MemberType, mh.Is.AllowNull, i);
                    mh.SetValue(obj, value);
                }
                list.Add(obj);
            }

            return(list);
        }
コード例 #19
0
ファイル: DbDriver.cs プロジェクト: pigeon79/GCore
 private DbFactory CreateDbProviderFactory(string dbProviderFactoryName)
 {
     if (dbProviderFactoryName != "")
     {
         string[] ss    = StringHelper.Split(dbProviderFactoryName, ':', 2);
         string   fn    = ss[0].Trim();
         string   addon = ss[1].Trim();
         if (fn[0] == '@')
         {
             fn = string.Format("G.Data.Driver.{0}, G.Data", fn.Substring(1));
         }
         object f = ClassHelper.CreateInstance(fn);
         if (f is SmartDbFactory)
         {
             ((SmartDbFactory)f).Init(addon);
             return((SmartDbFactory)f);
         }
         return(new DbFactory((DbProviderFactory)f));
     }
     return(new DbFactory(GetDefaultProviderFactory()));
 }
コード例 #20
0
ファイル: DbDriverFactory.cs プロジェクト: sfltd/DbEntry
        private static DbDriver GetDriver(string name)
        {
            var ctx = ConfigReader.Config.Database.Context[name];

            if (ctx.DataBase == "")
            {
                throw new SettingException("DataBase must be set as a valid value. Current get is : " + ctx.DataBase);
            }
            string[] ss = StringHelper.Split(ctx.DataBase, ':', 2);
            var      ds = ss[0].Trim();

            if (ds[0] == '@')
            {
                ds = "Leafing.Data.Dialect." + ds.Substring(1) + ", Leafing.Data";
            }
            var    d   = (DbDialect)ClassHelper.CreateInstance(ds);
            var    scs = coder.Decode(ss[1].Trim());
            string cs  = d.GetConnectionString(scs);
            string pf  = ctx.ProviderFactory;

            return(CreateDbDriver(d, name, ctx.Driver, cs, ctx.ProviderFactory, ctx.AutoScheme));
        }
コード例 #21
0
ファイル: TypeBinder.cs プロジェクト: zyj0021/DbEntry
        protected virtual object ProcessOtherType(string name, Type type)
        {
            var obj = ClassHelper.CreateInstance(type);

            foreach (var info in type.GetFields(BindingFlags.Instance | BindingFlags.Public))
            {
                var value = HttpContextHandler.Instance[info.Name];
                if (!value.IsNullOrEmpty())
                {
                    var av = ClassHelper.ChangeType(value, info.FieldType);
                    info.SetValue(obj, av);
                }
            }
            foreach (var info in type.GetProperties())
            {
                var value = HttpContextHandler.Instance[info.Name];
                if (!value.IsNullOrEmpty())
                {
                    var av = ClassHelper.ChangeType(value, info.PropertyType);
                    info.SetValue(obj, av, null);
                }
            }
            return(obj);
        }
コード例 #22
0
        public IDbObjectHandler CreateDbObjectHandler()
        {
            if (Info.HandleType.IsGenericType)
            {
                switch (Info.HandleType.Name)
                {
                case "GroupByObject`1":
                    var t = typeof(GroupbyObjectHandler <>).MakeGenericType(Info.HandleType.GetGenericArguments());
                    return((IDbObjectHandler)ClassHelper.CreateInstance(t));

                case "GroupBySumObject`2":
                    var ts = typeof(GroupbySumObjectHandler <,>).MakeGenericType(Info.HandleType.GetGenericArguments());
                    return((IDbObjectHandler)ClassHelper.CreateInstance(ts));

                default:
                    throw new NotSupportedException();
                }
            }
            var gen = new ModelHandlerGenerator(Info);
            var o   = (EmitObjectHandlerBase)ClassHelper.CreateInstance(gen.Generate());

            o.Init(Info);
            return(o);
        }
コード例 #23
0
ファイル: ProcessorSettings.cs プロジェクト: leohsu91/DbEntry
 public static ISymbolWriterProvider GetSymbolWriterProvider()
 {
     return((ISymbolWriterProvider)ClassHelper.CreateInstance(SymbolWriterProvider));
 }
コード例 #24
0
        public static void Main()
        {
            //演示一:动态生成类。
            #region 演示一:动态生成类。
            //生成一个类t。
            Type t = ClassHelper.BuildType("MyClass");
            #endregion

            //演示二:动态添加属性到类。
            #region 演示二:动态添加属性到类。
            //先定义两个属性。
            List <ClassHelper.CustPropertyInfo> lcpi = new List <ClassHelper.CustPropertyInfo>();
            ClassHelper.CustPropertyInfo        cpi;

            cpi = new ClassHelper.CustPropertyInfo("System.String", "S1");
            lcpi.Add(cpi);
            cpi = new ClassHelper.CustPropertyInfo("System.String", "S2");
            lcpi.Add(cpi);

            //再加入上面定义的两个属性到我们生成的类t。
            t = ClassHelper.AddProperty(t, lcpi);

            //把它显示出来。
            DispProperty(t);

            //再定义两个属性。
            lcpi.Clear();
            cpi = new ClassHelper.CustPropertyInfo("System.Int32", "I1");
            lcpi.Add(cpi);
            cpi = new ClassHelper.CustPropertyInfo("System.Int32", "I2");
            lcpi.Add(cpi);

            //再加入上面定义的两个属性到我们生成的类t。
            t = ClassHelper.AddProperty(t, lcpi);

            //再把它显示出来,看看有没有增加到4个属性。
            DispProperty(t);
            #endregion

            //演示三:动态从类里删除属性。
            #region 演示三:动态从类里删除属性。
            //把'S1'属性从类t中删除。
            t = ClassHelper.DeleteProperty(t, "S1");
            //显示出来,可以看到'S1'不见了。
            DispProperty(t);

            #endregion

            //演示四:动态获取和设置属性值。
            #region 演示四:动态获取和设置属性值。
            //先生成一个类t的实例o。
            object o = ClassHelper.CreateInstance(t);

            //给S2,I2属性赋值。
            ClassHelper.SetPropertyValue(o, "S2", "abcd");
            ClassHelper.SetPropertyValue(o, "I2", 1234);

            //再把S2,I2的属性值显示出来。
            Console.WriteLine("S2 = {0}", ClassHelper.GetPropertyValue(o, "S2"));
            Console.WriteLine("I2 = {0}", ClassHelper.GetPropertyValue(o, "I2"));
            #endregion

            Console.Read();
        }