您可以使用泛型来实现所需的行为。不应在 WCF 中使用泛型。我一开始就没有意识到这一点。
public interface ICommunicationLoggService
{
[OperationContract]
bool SaveLog(Employee emp);
}
我需要上述方法作为通用方法,以便它可以将任何类对象作为参数,而不是针对特定的 Employee 对象。
就像我有3节课
class Employee
{
}
class Student
{
}
class Address
{
}
现在,当我打电话给saveLog()
时,它应该根据类进行。
我的英语不好,希望任何人都能理解这个问题并为我提供解决方案。
更新
经过一些研究,我得出的结论是,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);
}
}
旧零件
感谢卡米洛·特雷维托(Camilo Terevto(的解释,为什么使用泛型是不好的:
问题出在 WSDL。不能序列化不序列化的类型 知道的
public interface ICommunicationLoggService
{
[OperationContract]
bool SaveLog<TEntity>(TEntity emp);
}