Задача такая:
Есть сборка в которой происходит загрузка сторонних сборок (подгружаются ClickOnce приложения с удаленного сервера).
Далее хочу найти все окна загружаемой сборки(это сделано), найти у них метод Activate(тоже), и сделать инъекцию своего кода для перехвата создания окна.
Причем требуется сделать так, чтобы инъецируемый код обращался к методу основной сборки.
Нашел как сделать через Mono.Cecil, но хочу реализовать только средствами Framework'а.
Вот пример кода:
private static void InjectWindow(Assembly app)
{
Type[] types = app.GetTypes();
foreach (Type type in types)
{
//Если базовый тип выбранного типа - Окно, инъекцируем
if (type.BaseType.Name.Equals("Window", StringComparison.OrdinalIgnoreCase))
{
MethodInfo activate = type.GetMethod("Activate");
//Теперь надо как-то дописать свой код
}
}
}
В mono на этом этапе уже можно вызвать
activate.Body.Instructions.Insert(0, Instruction.Create(OpCodes.Ldstr, «Inject!»));
Как сделать без него?