Модификация метода времени выполнения
У меня есть следующий код, используя Mono.Cecil:
{
ModuleDefinition module = ModuleDefinition.ReadModule("library.dll");
TypeDefinition type1 = module.Types.Where(t => "Namespace.Destination".Equals(t.FullName)).Single();
TypeDefinition type2 = module.Types.Where(t => "Namespace.Target".Equals(t.FullName)).Single();
MethodDefinition method1 = type1.Methods.Where(m => "Test".Equals(m.Name)).Single();
MethodDefinition method2 = type2.Methods.Where(m => "Test".Equals(m.Name)).Single();
var processor = methodTesta1.Body.GetILProcessor();
var newInstruction = processor.Create(OpCodes.Call, methodTesta2);
var firstInstruction = methodTesta1.Body.Instructions[0];
processor.Replace(firstInstruction, newInstruction);
}
namespace Namespace
{
public class Destination
{
public String Test()
{
Console.Write("Destination method");
}
}
public class Target
{
public String Test()
{
Console.Write("Target Method");
}
}
}
Я не хотел бы создавать новый файл "dll" или перезаписывать текущий, я хочу изменять класс только во время выполнения. Как я могу "сохранить" модификацию и создать новый экземпляр класса Destination с измененным методом? Есть ли способ сделать это?
РЕДАКТИРОВАТЬ: целью является выполнение другого тела метода, когда вызывается определенный метод, который возвращает определенный тип.