FieldBuilder
FieldBuilderRequest is a request to create FieldBuilder.
// Create service
IService service = Services.Create(Avalanche.Emit.Module.Instance);
// Request to create type builder
IRequestFor<TypeBuilder> typeBuilder = new TypeBuilderRequest("MyClass10F", TypeAttributes.Public | TypeAttributes.Class | TypeAttributes.AutoClass);
// Request to create field
IRequestFor<FieldBuilder> field = new FieldBuilderRequest(
name: "MyField",
fieldType: typeof(int),
fieldAttributes: FieldAttributes.Public,
attributes: new object[] { new DataMemberAttribute { Order = 2 } }
);
Request is added as part of TypeBuilderRequest.
// Add field to type request
typeBuilder = typeBuilder.Append(field);
Try it in an instance.
// Request to build type
IRequestFor<Type> typeRequest = new TypeRequest(typeBuilder);
// Request to create new instance
IRequestFor<Object> newRequest = typeRequest.NewRequest();
// Get instance
object instance = service.GetRequired<IRequestFor<object>, object>(newRequest);
// Read with reflection
int value = (int)instance.GetType().GetField("MyField")!.GetValue(instance)!;
View complete request
NewRequest └── Type = TypeRequest └── Key = ContextRequest├── Key = "System.Reflection.Emit.TypeBuilder" ├── Value = TypeBuilderRequest │ ├── Name = "MyClass10F" │ └── Attributes = AutoLayout, AnsiClass, Class, Public, AutoClass └── Requests[0] = FieldBuilderRequest ├── Name = "MyField" ├── Attributes = Public └── FieldType = System.Int32
Full Example
Full example
using System;
using System.Reflection;
using System.Reflection.Emit;
using System.Runtime.Serialization;
using Avalanche.Emit;
using Avalanche.Service;
public class fieldbuilder
{
public static void Run()
{
{
// <01>
// Create service
IService service = Services.Create(Avalanche.Emit.Module.Instance);
// Request to create type builder
IRequestFor<TypeBuilder> typeBuilder = new TypeBuilderRequest("MyClass10F", TypeAttributes.Public | TypeAttributes.Class | TypeAttributes.AutoClass);
// Request to create field
IRequestFor<FieldBuilder> field = new FieldBuilderRequest(
name: "MyField",
fieldType: typeof(int),
fieldAttributes: FieldAttributes.Public,
attributes: new object[] { new DataMemberAttribute { Order = 2 } }
);
// </01>
// <02>
// Add field to type request
typeBuilder = typeBuilder.Append(field);
// </02>
// <03>
// Request to build type
IRequestFor<Type> typeRequest = new TypeRequest(typeBuilder);
// Request to create new instance
IRequestFor<Object> newRequest = typeRequest.NewRequest();
// Get instance
object instance = service.GetRequired<IRequestFor<object>, object>(newRequest);
// Read with reflection
int value = (int)instance.GetType().GetField("MyField")!.GetValue(instance)!;
// </03>
// Print
Console.WriteLine(newRequest.PrintTree());
}
}
}