ToStringRequest
ToStringRequest.Create() is a utility method that creates a request to override ToString() method in a TypeBuilder.
// Service that handles assembly builder, module builder and types
IService service = Services.Create((ServiceHandlers.Instance, Avalanche.Emit.Module.Instance), CachePolicies.Default);
// Request to create type builder
IRequestFor<TypeBuilder> typeBuilder = new TypeBuilderRequest("MyClass4", TypeAttributes.Public | TypeAttributes.Class | TypeAttributes.AutoClass);
// Create request to override ToString()
IRequest toString = ToStringRequest.Create("Hello World");
// Add request to override ToString()
typeBuilder = typeBuilder.Append(toString);
// Request to complete type
IRequestFor<Type> type = new TypeRequest(typeBuilder);
// Request to create new instance
IRequestFor<Object> newRequest = type.NewRequest();
// Issue request to create type and instance
object myInstance = service.GetRequired<object, object>(newRequest);
// Print ToString()
Console.WriteLine(myInstance.ToString());
View complete request
NewRequest └── Type = TypeRequest └── Key = ContextRequest├── Key = "System.Reflection.Emit.TypeBuilder" ├── Value = TypeBuilderRequest │ ├── Name = "MyClass4" │ └── Attributes = AutoLayout, AnsiClass, Class, Public, AutoClass └── Requests[0] = BatchRequest ├── Requests[0] = Emit │ ├── Opcode = ldstr │ ├── Parameters[0] = "Hello World" │ └── ILGenerator = ILGeneratorRequest │ └── Builder = MethodBuilderRequest │ ├── Name = "ToString" │ ├── Attributes = PrivateScope, Public, Virtual, HideBySig │ └── ReturnType = System.String └── Requests[1] = Emit ├── Opcode = ret └── ILGenerator = ILGeneratorRequest
Full Example
Full example
using System;
using System.Reflection;
using System.Reflection.Emit;
using Avalanche.Emit;
using Avalanche.Service;
public class utilities
{
public static void Run()
{
{
// <01>
// Service that handles assembly builder, module builder and types
IService service = Services.Create((ServiceHandlers.Instance, Avalanche.Emit.Module.Instance), CachePolicies.Default);
// Request to create type builder
IRequestFor<TypeBuilder> typeBuilder = new TypeBuilderRequest("MyClass4", TypeAttributes.Public | TypeAttributes.Class | TypeAttributes.AutoClass);
// Create request to override ToString()
IRequest toString = ToStringRequest.Create("Hello World");
// Add request to override ToString()
typeBuilder = typeBuilder.Append(toString);
// Request to complete type
IRequestFor<Type> type = new TypeRequest(typeBuilder);
// Request to create new instance
IRequestFor<Object> newRequest = type.NewRequest();
// Issue request to create type and instance
object myInstance = service.GetRequired<object, object>(newRequest);
// Print ToString()
Console.WriteLine(myInstance.ToString());
// </01>
Console.WriteLine(newRequest.PrintTree());
}
}
}