gpt4 book ai didi

c# - 可以将任何类对象作为参数的 WCF 方法

转载 作者:行者123 更新时间:2023-11-30 21:36:30 25 4
gpt4 key购买 nike

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

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

比如我有 3 个类(class)

class Employee
{

}
class Student
{

}
class Address
{

}

现在,当我调用 saveLog() 时,它应该基于类..

我的英语不好希望有人能理解这个问题并为我提供解决方案..

最佳答案

更新

经过一些研究,我得出的结论是它似乎是 SOA 的最佳选择。不要在这些接口(interface)中使用泛型。

所以最简单的解决方案似乎是为每个实体类型使用单独的日志方法。

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为了解释,为什么使用泛型是不好的:

The problem is the WSDL. You cannot serialize a type that you don't know of

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

关于c# - 可以将任何类对象作为参数的 WCF 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48092576/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com