WCF方法,可以将任何类对象作为参数

时间:2018-01-04 09:47:03

标签: c# wcf

public interface ICommunicationLoggService
{
    [OperationContract]
     bool SaveLog(Employee emp);
}

我需要将上述方法作为泛型,以便它可以将任何类对象作为参数而不是特定的Employee对象。

就像我有3个班级

class Employee
{

}
class Student
{

}
class Address
{

}

现在,当我打电话给saveLog()时,它应该基于班级。

我不擅长英语,希望任何人都能理解这个问题并为我提供解决方案..

1 个答案:

答案 0 :(得分:3)

更新

经过一些研究,我得出的结论是,SOA似乎是Camilo Terevinto在这些界面中不使用泛型的最佳选择。

因此,最简单的解决方案似乎为每种实体类型都有一个单独的日志方法。

public interface ICommunicationLoggService
{
    [OperationContract]
    bool SaveLog(Employee emp);
    [OperationContract]
    bool SaveLog(Studend emp);
    [OperationContract]
    bool SaveLog(Address emp);
}

选项2

您还可以使用贝司课程来录制"记录"类型。

public interface ICommunicationLoggService {
  [OperationContract]
  bool SaveLog(Loggable loggable);
}

public class ComunicationLoggerService : ICommunicationLoggService {
  public bool SaveLog(Loggable loggable) {
    return false;
  }
}

public class Loggable { }

public class Employee : Loggable { }

public class Studend : Loggable { }

public class Address : Loggable { }

public class Example 
{
  public void Foo() 
  {
    Employee employee = new Employee();
    ICommunicationLoggService loggService = new ComunicationLoggerService();
    loggService.SaveLog(employee);
  }
}

旧部分

您可以使用泛型来实现所需的行为。 你不应该在WCF中使用泛型。我从一开始就没有意识到这一点。

感谢WSDL的解释,为什么使用泛型是坏的:

  

问题是Ext.plugin.Responsive。您无法序列化您不喜欢的类型   知道

public interface ICommunicationLoggService
{
    [OperationContract]
    bool SaveLog<TEntity>(TEntity emp);
}