现在的位置: 首页 > 综合 > 正文

变通一下,让WCF支持泛型方法

2013年07月16日 ⁄ 综合 ⁄ 共 829字 ⁄ 字号 评论关闭

在实际项目开发中,我们经常用到List<T> GetList<T>(xxxx), int Save<T>(T t) ,T GetData<T>(int id)这样的方法

如果WCF服务发布这些的服务,我们在客户端调用就方便太多,但是WCF不支持这样的服务契约。

所以,我在实际项目中,做了一下变通,解决方案如下:

1.接口定义

  [OperationContract]

  int SaveData(string type, string data);

2.接口实现 

  public int SaveData(string type,string data)

 {
    MethodInfo method1 = typeof(JsonHelper).GetMethod("GetJsonData").MakeGenericMethod(Type.GetType(type));
    object obj = method1.Invoke(null, new object[] { data });  // 调用JsonHelper.GetJsonData<T>(T t)方法
  MethodInfo method2 = typeof(ORMHelper).GetMethod("SaveData").MakeGenericMethod(obj.GetType());
    return int.Parse(method2.Invoke(null, new object[] { obj })); //调用ORMHelper.SaveData<T>(T t)方法
 }

3.客户端实现

  public static int SaveData<T>(T data) where T : new()

 {
     string type = typeof(T).AssemblyQualifiedName;
     string jsonData = JsonHelp.GetJsonString(data);
     return WcfServices.SaveData(type, jsonData);
 }

 

【上篇】
【下篇】

抱歉!评论已关闭.