FieldBuilder
FieldBuilderRequest is a request to create FieldBuilder.
// Create service
IService service = Services.Create((ServiceHandlers.Instance, EmitHandlers.Instance), CachePolicies.Default);
// 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),
Attributes: FieldAttributes.Public
);
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> type = new TypeRequest(typeBuilder);
// Request to create new instance
IRequestFor<Object> newRequest = type.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 Avalanche.Emit;
using Avalanche.Service;
public class fieldbuilder
{
public static void Run()
{
{
// <1>
// Create service
IService service = Services.Create((ServiceHandlers.Instance, EmitHandlers.Instance), CachePolicies.Default);
// 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),
Attributes: FieldAttributes.Public
);
// </1>
// <2>
// Add field to type request
typeBuilder = typeBuilder.Append(field);
// </2>
// <3>
// Request to build type
IRequestFor<Type> type = new TypeRequest(typeBuilder);
// Request to create new instance
IRequestFor<Object> newRequest = type.NewRequest();
// Get instance
object instance = service.GetRequired<IRequestFor<object>, object>(newRequest);
// Read with reflection
int value = (int)instance.GetType().GetField("MyField")!.GetValue(instance)!;
// </3>
// Print
Console.WriteLine(newRequest.PrintTree());
}
}
}