У меня есть два процесса (A и B), оба имеют метод Foo (SomeClass paramA, SomeOtherClass paramB). процессы взаимодействуют с помощью Windows, Pipes (не WCF) и может отправлять и получать сообщения типа:C# Вызов метода с использованием отражения в общем виде
public class PipeMessageArgs
{
public PipeMessageArgs(string i_MethodName, List<object> i_Args)
{
MethodName = i_MethodName;
Args = i_Args;
}
public string MethodName { get; private set; }
public List<object> Args { get; private set; }
}
При вызове Foo на А, я хочу, чтобы вызвать Foo на В, с теми же значениями.
Это код вызова в A:
public void Foo(SomeClass paramA, SomeOtherClass paramB)
{
var args = new List<object> { paramA, paramB };
m_Server.PushMessage(new PipeMessageArgs(MethodBase.GetCurrentMethod().Name, args));
}
Это код ссылающееся в B:
void ClientOnReceiveMessage(NamedPipeConnection i_Connection, object i_Message)
{
var pipeMessageArgs = i_Message as PipeMessageArgs;
GetType().GetMethod(pipeMessageArgs.MethodName).Invoke(this, pipeMessageArgs.Args.ToArray());
}
Но как вы можете видеть, что я должен вручную создать список параметров для каждый звонок, поэтому, если я забуду параметр или неправильно сделаю заказ, все не сработает. Учитывая, что я не могу использовать отражение для получения значений, и я не хочу использовать профилировщик (производительность - это проблема), каков наилучший способ сделать его более общим?
Редактировать: я не могу использовать WCF по многим причинам (на самом деле, я ухожу от WCF). Я использую трубы, а именно PipeStream.
Edit2: Что я хочу - это решение, которое не полагается на ручное создание массивов параметров; то, что может создать этот массив автоматически для меня.
hmm. вместо списка вы можете использовать словарь и поместить имя параметра в ключ? –
Ewan
Но на самом деле я хотел бы сделать это _less_ generic и создать некоторый строго типизированный метод связи. не знаете, сколько вы можете изменить? – Ewan
Да, я знаю, что могу преодолеть проблему заказа, то, что я действительно хочу, является чем-то более общим - что-то, что позволит мне вручную объявить набор значений. – Tsury