[英]How to implement a generic method that returns a specific type on an interface in C#
我正在开发几个WCF Http Web服务。 所有这些WCF Web服务都具有相同的操作,但是对于给定的操作,每个WCF Web服务都返回不同的类型。
例如,有两个服务ServiceA
和ServiceB
,都具有操作GetData
。 但是,对于ServiceA
, GetData
操作必须返回一个int
,对于ServiceB
, GetData
操作必须返回一个string
:
[ServiceContract]
public interface IServiceA
{
[OperationContract]
int GetData();
}
public class ServiceA : IServiceA
{
public int GetData()
{
return 0;
}
}
[ServiceContract]
public interface IServiceB
{
[OperationContract]
string GetData();
}
public class ServiceB : IServiceB
{
public string GetData()
{
return "any text";
}
}
WCF Web服务需要正确公开元数据,我的意思是,它们必须公开GetData
操作返回的数据类型( int
, string
),以便告诉服务使用者期望的数据类型。 换句话说,具有XSD模式。
如您所知,当您创建新的WCF Web服务时,VS将创建一个用于声明操作的接口,并声明所需的[ServiceContract]
和[OperationContract]
属性,并创建实现该接口的类。
为了使代码标准化并节省一些时间来键入接口的实现,我想创建一个所有WCF Web服务都通用的接口,该接口将通用操作(例如GetData
)声明为通用,然后在实施。
我想做这样的事情:
[ServiceContract]
public interface IServiceCommon
{
[OperationContract]
T GetData<T>();
}
[ServiceContract]
public interface IServiceA : IServiceCommon
{
}
public class ServiceA : IServiceA
{
public int GetData()
{
return 0;
}
}
但是,我收到以下错误:
“ ServiceA”未实现接口成员“ IServiceCommon.GetData()”
如何实现在GetData方法上返回任何类型值的任何服务类?
在撰写本文时,我通过声明以下接口来提出解决方案:
[ServiceContract]
public interface IServiceCommon<T>
{
[OperationContract]
T GetData();
}
[ServiceContract]
public interface IServiceA : IServiceCommon<int>
{
}
public class ServiceA : IServiceA
{
public int GetData()
{
return 0;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.