Хорошо, до сих пор, у меня есть способ разоблачить некоторые методы, использующие это:C# RPC разоблачать методы API
AddCommand ("UpdateStar", ((args) => {
// do something
}));
Он добавляет команду в SortedDictionary<string, SimpleDelegate>
. Вот мое SimpleDelegate
определения:
public delegate void SimpleDelegate(JSONNode args);
Это довольно прямо вперед, с Javascript Посылает список аргументов и в C# я получаю JSONNode
который является JSONArray
. Это работает, но это очень раздражает, чтобы сделать такие вещи, как:
string name = args[0].Value;
int x = args[1].AsInt;
...
В конце концов, что я хотел бы сделать это вместо того, чтобы выставить фактические методы в C# вместо разоблачающие лямбды.
Другими словами, я хотел бы сделать что-то вроде этого:
[expose-to-rpc]
public void AddSystem(string name, int x, int y) {
}
Это может найти имя метода, число аргументов и тип аргументов с помощью отражения. Я почти уверен, что что-то подобное возможно, но я потерялся здесь. Не знаете, как начать.
Возможный дубликат [Как использовать отражение для вызова всех методов, которые имеют определенный пользовательский атрибут?] (Http://stackoverflow.com/questions/2831809/how-would-i-use-reflection-to- call-all-the-methods-that-has-an-custom-att-att) –
@ KeithNicholas Я решил свой собственный ответ, но это немного сложнее, чем получить методы. Мы должны проанализировать параметры и тип возвращаемого значения, а затем вызывать фактический метод с преобразованными параметрами. –
Да, это довольно прямолинейно, вам нужно что-то для начала в соответствии с вашим вопросом, все это уже было задано в SO, неоднократно :) –