public void TestDynamicTypeBuilder() { var descriptor = new DynamicTypeDescriptorBuilder() .HasName("SomeDynamicType") .AddProperty <int>("A", config => config .HasAttribute(() => new TestPropertyAttribute("name", "value")) ); var type = DynamicTypeBuilder.Instance.CreateType(descriptor); var ctor = Expression.Lambda <Func <object[], object> >(Expression.New(type.GetConstructor(Type.EmptyTypes)), Expression.Parameter(typeof(object[]))).Compile(); var o = ctor(new object[] { }); }
private Type BuildProjectedType() { if (configuration.CtorParameters.Any()) { throw new InvalidOperationException("Cannot build projected type with explicit constructor parameter mapping"); } var typeBuilder = new DynamicTypeDescriptorBuilder(configuration.ProjectedTypeName); foreach (var member in configuration.Members) { typeBuilder.AddProperty( member.ProjectedMember.GetName(), //overriden type member.AsType ?? //specified member type member.ProjectedMember.GetMemberType() ?? //auto (member.Source == null ? GetMemberInfoType( configuration.SourceType.GetMember( GetSourceMemberNameFromMemberName( member.ProjectedMember.GetName())).First()) : //expression GetExpression(member.Source, configuration.It)?.Type) ?? //fallback typeof(object), config => { if (member.ProjectionTarget == ProjectionTarget.CtorParameter) { config.IsInitializedInConstructorOptional(member.CtorParameterName); } config.AsNullable(member.AsNullable); }); } return(DynamicTypeBuilder.Instance.CreateType(typeBuilder)); }
private static Type BuildKeyValueType(Type entityType, List <PropertyInfo> keyProperties) { var dynamicTypeBuilderDescriptor = new DynamicTypeDescriptorBuilder("_" + entityType.FullName + CLASS_NAME_SUFFIX) .HasBaseType <DomainKeyValue>(); keyProperties .ForEach(x => { dynamicTypeBuilderDescriptor.AddProperty( x.Name, x.PropertyType, config => config .HasSetter(GetSetAccessModifier.None) .IsInitializedInConstructor() ); }); var keyValueType = DynamicTypeBuilder.Instance.CreateType(dynamicTypeBuilderDescriptor); return(keyValueType); }