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);
}
你也可以使用贝司类作为“可记录”类型。
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);
}