Если бы я писал код, это было бы очень просто. У меня есть код, который выглядит так:
public class SomeClass
{
public void SomeMethod(ISomeService someService)
{
}
private void AnotherMethod(ISomeService someService)
{
}
}
Я могу получить определение метода для обоих методов со ссылкой на тип, но я пытаюсь получить вызов из SomeMethod в AnotherMethod, добавленный в IL, чтобы у вас был эквивалентный код, например:
public void SomeMethod(ISomeService someService)
{
AnotherMethod(someService);
}
Я полностью потерялся в данный момент, пытаясь понять, как правильно построить необходимые инструкции.
То, что у меня сейчас есть, выглядит примерно так:
private void ProcessType(TypeDefinition typeDef)
{
var anotherMethodDef = typeDef.Methods.FirstOrDefault(x => HasMethod(x, "AnotherMethod"));
if(someMethodDef != null)
{
var someMethodDef = typeDef.Methods.First(x => HasMethod(x, "SomeMethod"));
var processor = someMethodDef.Body.GetILProcessor();
// Now I need to generate:
// AnotherMethod(someService); as a new instruction
}
}
private static bool HasMethod(MethodDefinition method, string expected) =>
method.Name == expected && method.Parameters.Count() == 1 &&
method.Parameters.First().TypeDefinition.FullName == "Contoso.ISomeService";