Модификация метода времени выполнения

У меня есть следующий код, используя 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 с измененным методом? Есть ли способ сделать это?

РЕДАКТИРОВАТЬ: целью является выполнение другого тела метода, когда вызывается определенный метод, который возвращает определенный тип.

0 ответов

Другие вопросы по тегам