public void SaveTest()
        {
            var fileName        = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "dynamicAssembly1.dll");
            var assemblyBuilder = new DynamicAssemblyBuilder("dynamicAssembly1", fileName);

            assemblyBuilder.Save();

            Assert.IsTrue(File.Exists(fileName));
        }
        public void SaveAllTest()
        {
            var assemblyBuilder = new DynamicAssemblyBuilder("dynamicAssembly1");
            var type1           = assemblyBuilder.DefineType("class1");
            var type2           = assemblyBuilder.DefineType("class2");

            assemblyBuilder.Save();

            Assert.AreEqual(2, assemblyBuilder.AssemblyBuilder.GetTypes().Length);
        }
示例#3
0
        public void TestAssemblyBuilder()
        {
            var assemblyBuilder = new DynamicAssemblyBuilder("DynamicAssembly1");

            var interfaceBuilder = assemblyBuilder.DefineInterface("IInterface");
            var typeBuilder      = assemblyBuilder.DefineType("Class1");
            var enumBuilder      = assemblyBuilder.DefineEnum("Enum1");
            var assembly         = assemblyBuilder.Save();

            Assert.AreEqual("Class1", typeBuilder.TypeBuilder.Name);
            Assert.AreEqual("DynamicAssembly1", assembly.GetExportedTypes().Length);
        }
示例#4
0
        public void TestSaveAll()
        {
            var assemblyBuilder = new DynamicAssemblyBuilder("dynamicAssembly1");
            var type1           = assemblyBuilder.DefineType("class1");
            var type2           = assemblyBuilder.DefineType("class2");

#if NETAPPCORE
            assemblyBuilder.Save();
#endif

            Assert.AreEqual(2, assemblyBuilder.AssemblyBuilder.GetTypes().Length);
        }
        public void TestBuild()
        {
#if !NETCOREAPP2_0
            var assBuilder  = new DynamicAssemblyBuilder("test_dll", "e:\\test.dll");
            var typeBuilder = new EntityTypeBuilder("TestEntity", assBuilder);
#else
            var typeBuilder = new EntityTypeBuilder("testclass");
#endif
            var pName = new GeneralProperty()
            {
                Name = "Name", Info = new PropertyMapInfo {
                    FieldName = "name"
                }, Type = typeof(string)
            };
            typeBuilder.Properties.Add(pName);
            typeBuilder.Properties.Add(new GeneralProperty()
            {
                Name = "Age", Info = new PropertyMapInfo {
                    FieldName = "age"
                }, Type = typeof(int?)
            });
            typeBuilder.Properties.Add(new GeneralProperty()
            {
                Name = "Sex", Info = new PropertyMapInfo {
                    FieldName = "sex"
                }, Type = typeof(Sex)
            });

            typeBuilder.DefineValidateRule(pName, () => new System.ComponentModel.DataAnnotations.MaxLengthAttribute(15));

            var type = typeBuilder.Create();

#if !NETCOREAPP2_0
            assBuilder.Save();
#endif

            var e = type.New <IEntity>();
            e.SetValue("Name", "fireasy");
            e.SetValue("Age", 12);
            e.SetValue("Sex", Sex.M);

            Assert.AreEqual(e.GetValue("Name"), "fireasy");
            Assert.AreEqual(e.GetValue("Age"), 12);
            Assert.AreEqual(e.GetValue("Sex"), Sex.M);

            ValidationUnity.Validate(e);

            var property = PropertyUnity.GetProperty(type, "Name");
            Assert.IsNotNull(property);

            Assert.AreEqual(type.GetProperty("Name").GetValue(e), "fireasy");
        }
示例#6
0
        private static Type BuildProfileProxyType(Type profileType, List <string> assemblyList)
        {
            var fileName = Util.GenerateTempFileName();

            assemblyList.Add(fileName);
            var assemblyBuilder = new DynamicAssemblyBuilder("__Profile_Proxy", fileName);

            var typeBuilder = assemblyBuilder.DefineType("Profile", baseType: typeof(MarshalByRefObject));

            //定义Table代理类的属性
            foreach (var property in profileType.GetProperties(BindingFlags.Public | BindingFlags.Instance))
            {
                typeBuilder.DefineProperty(property.Name, property.PropertyType).DefineGetSetMethods();
            }

            assemblyBuilder.Save();
            return(typeBuilder.UnderlyingSystemType);
        }
示例#7
0
        private static ProxyType BuildSchemaProxyType(List <string> assemblyList)
        {
            var proxyType = new ProxyType();
            var fileName  = Util.GenerateTempFileName();

            assemblyList.Add(fileName);
            var assemblyBuilder = new DynamicAssemblyBuilder("__Schema_Proxy", fileName);

            var tableTypeBuilder     = assemblyBuilder.DefineType("Table", baseType: typeof(MarshalByRefObject));
            var columnTypeBuilder    = assemblyBuilder.DefineType("Column", baseType: typeof(MarshalByRefObject));
            var referenceTypeBuilder = assemblyBuilder.DefineType("Reference", baseType: typeof(MarshalByRefObject));

            tableTypeBuilder.ImplementInterface(typeof(_IIdentity));
            columnTypeBuilder.ImplementInterface(typeof(_IIdentity));
            referenceTypeBuilder.ImplementInterface(typeof(_IIdentity));

            proxyType.TableType     = tableTypeBuilder.UnderlyingSystemType;
            proxyType.ColumnType    = columnTypeBuilder.UnderlyingSystemType;
            proxyType.ReferenceType = referenceTypeBuilder.UnderlyingSystemType;

            //定义Table代理类的属性
            foreach (var property in SchemaExtensionManager.GetWrapType <Table>().GetProperties(BindingFlags.Public | BindingFlags.Instance))
            {
                var propertyType = Replace(property.PropertyType, proxyType);
                tableTypeBuilder.DefineProperty(property.Name, propertyType).DefineGetSetMethods();
            }

            //定义Table代理类的属性
            foreach (var property in SchemaExtensionManager.GetWrapType <Column>().GetProperties(BindingFlags.Public | BindingFlags.Instance))
            {
                var propertyType = Replace(property.PropertyType, proxyType);
                columnTypeBuilder.DefineProperty(property.Name, propertyType).DefineGetSetMethods();
            }

            //定义Table代理类的属性
            foreach (var property in SchemaExtensionManager.GetWrapType <Reference>().GetProperties(BindingFlags.Public | BindingFlags.Instance))
            {
                var propertyType = Replace(property.PropertyType, proxyType);
                referenceTypeBuilder.DefineProperty(property.Name, propertyType).DefineGetSetMethods();
            }

            assemblyBuilder.Save();
            return(proxyType);
        }