Я использую MethodCallExpression для записи вызовов методов.
public void RegisterInvocation<TSource>
(TSource target, Expression<Action<TSource>> selector)
{
...
}
Иногда, когда я выполняю выражение следующим образом:
selector.Compile().Invoke();
И здесь у меня возникает странный эффект (возможно, ячто-то неправильно понимать с выражениями вызова метода).
Если я регистрирую вызов метода с обычными переменными или постоянными аргументами, методы вызываются с правильными аргументами:
string item = "sometext";
instance.RegisterInvocation<ITarget>(this, p => p.Add(item));
Но если я регистрируюПри вызове метода с аргументами переменной экземпляра метод вызывается со значениями аргументов переменной экземпляра во время выполнения, а не во время регистрации:
public class Target : ITarget
{
string item;
public void DoSomething()
{
this.item = "sometext";
instance.RegisterInvocation<ITarget>(this, p => p.Add(this.item));
this.item = "anothertext";
instance.CallRegisteredInvocation();
}
public void Add(string item)
{
// "somestring" expected, but item is = "anotherstring"
}
}
Есть ли способ вызвать выражение вызова метода с аргументами ввремя регистрации?