我在远程系统上调用方法。远程系统实现了两个系统都具有(通过共享nuget存储库)副本的接口。目前我发送的请求是这样的:
var oldRequest = new FooRequest("GetEmployeeById", new object[] { "myPartner", 42, DateTime.Now.AddDays(-1) });
这是界面:
public class FooResponse<T> { }
public interface IFooController
{
FooResponse<string> GetEmployeeById(string partnerName, int employeeId, DateTime? ifModifiedSince);
}
正如您可以映像一样,有时程序员会以错误的顺序将参数传递给构造函数中的数组,并且事情开始失败。为了解决这个问题,我创建了以下代码,以便在创建FooRequest
时支持intellisense:
public static FooRequest Create<T>(Func<FooResponse<T>> func)
{
return new FooRequest(null, null); // Here goes some magic reflection stuff instead of null.
}
现在可以像这样创建一个FooRequest
:
public static IFooController iFooController => (IFooController)new object();
public static FooRequest CreateRequest<T>(Func<FooResponse<T>> func)
{
return FooRequest.Create(func);
}
var newRequest = CreateRequest(() => iFooController.GetEmployeeById("myPartner", 42, DateTime.Now.AddDays(-1)));
我的问题是:我如何能够在FooRequest.Create
- 方法中获取方法的名称和参数的值?
我已经用尽了我的反思和谷歌技能试图找到价值观,但到目前为止还没有运气。
如果有人想要试一试,可以在这里找到完整的编译代码:http://ideone.com/ovWseI
答案 0 :(得分:2)
以下是如何使用表达式执行此操作的草图:
let params = ["fields" : "email, name"]
let graphRequest = GraphRequest(graphPath: "me", parameters: params)
graphRequest.start {
(urlResponse, requestResult) in
switch requestResult {
case .failed(let error):
print("error in graph request:", error)
break
case .success(let graphResponse):
if let responseDictionary = graphResponse.dictionaryValue {
print(responseDictionary)
print(responseDictionary["name"])
print(responseDictionary["email"])
}
}
}