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

问题描述 投票:2回答:1
public interface ICommunicationLoggService
{
    [OperationContract]
     bool SaveLog(Employee emp);
}

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

就像我有3个类

class Employee
{

}
class Student
{

}
class Address
{

}

现在,当我打电话给saveLog()然后它应该基于上课..

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

c# wcf
1个回答
3
投票

更新

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

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

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中使用泛型。我没有意识到这一点。

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

问题是WSDL。您无法序列化您不知道的类型

public interface ICommunicationLoggService
{
    [OperationContract]
    bool SaveLog<TEntity>(TEntity emp);
}
© www.soinside.com 2019 - 2024. All rights reserved.