コード例 #1
0
 public void AddType(string name, DynamicTypeInfo info)
 {
     lock (accessLock)
     {
         this.dynamicTypeStore.Add(name, info);
     }
 }
コード例 #2
0
ファイル: ObjectExtension.cs プロジェクト: dekkerb115/Bam.Net
        public static Type ToDynamicType(this DataRow row, string typeName, out AssemblyBuilder assemblyBuilder)
        {
            if (DynamicTypeStore.Current.ContainsTypeInfo(typeName) && DynamicTypeStore.Current[typeName] != null)
            {
                DynamicTypeInfo info = DynamicTypeStore.Current[typeName];
                assemblyBuilder = info.AssemblyBuilder;
                return(info.DynamicType);
            }
            else
            {
                TypeBuilder typeBuilder;
                GetAssemblyAndTypeBuilder(typeName, out assemblyBuilder, out typeBuilder);

                foreach (DataColumn column in row.Table.Columns)
                {
                    CustomPropertyInfo propInfo = new CustomPropertyInfo(column.ColumnName, row[column].GetType());
                    AddPropertyToDynamicType(typeBuilder, propInfo);
                }

                Type returnType = typeBuilder.CreateType();
                Expect.IsNotNull(DynamicTypeStore.Current[typeName], "DynamicTypeInfo was unexpectedly null.");
                DynamicTypeStore.Current[typeName].DynamicType = returnType;
                return(returnType);
            }
        }
コード例 #3
0
 public void AddType(string name, DynamicTypeInfo info)
 {
     lock (accessLock)
     {
         this.dynamicTypeStore.Add(name, info);
     }
 }
コード例 #4
0
ファイル: ObjectExtension.cs プロジェクト: dekkerb115/Bam.Net
        private static void GetAssemblyAndTypeBuilder(string typeName, out AssemblyBuilder assemblyBuilder, out TypeBuilder typeBuilder)
        {
            if (DynamicTypeStore.Current.ContainsTypeInfo(typeName))
            {
                DynamicTypeInfo info = DynamicTypeStore.Current[typeName];
                assemblyBuilder = info.AssemblyBuilder;
                typeBuilder     = info.TypeBuilder;
            }
            else
            {
                string       name         = typeName;
                AssemblyName assemblyName = new AssemblyName("DynamicGenerator");
                assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.RunAndSave);
                ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule(assemblyName.Name, assemblyName.Name + ".dll");

                typeBuilder = moduleBuilder.DefineType(name, TypeAttributes.Public);

                DynamicTypeStore.Current.AddType(typeName, new DynamicTypeInfo {
                    AssemblyBuilder = assemblyBuilder, TypeBuilder = typeBuilder, TypeName = typeName
                });
            }
        }