繁体   English   中英

如何在C#中实现在接口上返回特定类型的通用方法

[英]How to implement a generic method that returns a specific type on an interface in C#

我正在开发几个WCF Http Web服务。 所有这些WCF Web服务都具有相同的操作,但是对于给定的操作,每个WCF Web服务都返回不同的类型。

例如,有两个服务ServiceAServiceB ,都具有操作GetData 但是,对于ServiceAGetData操作必须返回一个int ,对于ServiceBGetData操作必须返回一个string

ServiceA接口:

[ServiceContract]
public interface IServiceA
{
    [OperationContract]
    int GetData();
}

ServiceA实施:

public class ServiceA : IServiceA
{
    public int GetData()
    {
        return 0;
    }
}

ServiceB接口:

[ServiceContract]
public interface IServiceB
{
    [OperationContract]
    string GetData();
}

ServiceA实施:

public class ServiceB : IServiceB
{
    public string GetData()
    {
        return "any text";
    }
}

WCF Web服务需要正确公开元数据,我的意思是,它们必须公开GetData操作返回的数据类型( intstring ),以便告诉服务使用者期望的数据类型。 换句话说,具有XSD模式。

如您所知,当您创建新的WCF Web服务时,VS将创建一个用于声明操作的接口,并声明所需的[ServiceContract][OperationContract]属性,并创建实现该接口的类。

为了使代码标准化并节省一些时间来键入接口的实现,我想创建一个所有WCF Web服务都通用的接口,该接口将通用操作(例如GetData )声明为通用,然后在实施。

我想做这样的事情:

通用接口:

[ServiceContract]
public interface IServiceCommon
{
    [OperationContract]
    T GetData<T>();
}

ServiceA接口:

[ServiceContract]
public interface IServiceA : IServiceCommon
{

}

ServiceA实施:

public class ServiceA : IServiceA
{
    public int GetData()
    {
        return 0;
    }
}

但是,我收到以下错误:

“ ServiceA”未实现接口成员“ IServiceCommon.GetData()”

如何实现在GetData方法上返回任何类型值的任何服务类?

在撰写本文时,我通过声明以下接口来提出解决方案:

通用接口:

[ServiceContract]
public interface IServiceCommon<T>
{
    [OperationContract]
    T GetData();
}

ServiceA接口:

[ServiceContract]
public interface IServiceA : IServiceCommon<int>
{

}

ServiceA实施:

public class ServiceA : IServiceA
{
    public int GetData()
    {
        return 0;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM