C#中的一个接口和两个实现类(代理)

学习者

我正在尝试向C#中的现有代码添加功能并调用api,例如MyAPI(arg1,arg2)。我有一个接口,可以说是IProvider,它具有一组客户端API定义。我有两个客户端代理类-Provider和ProviderNew,它们有一些API的包装实现-在每个包装函数(对于API)中,我们称之为最终调用托管在远程服务器上的服务API。仅在ProviderNew(Not Provider)项目类下-在Service references下-我看到MyAPI正在WSDL,xsd文件中定义(或自动生成,因为我不确定如何创建这些文件)。添加到这些内容中,我仅在ProviderNew上看到一些reference.cs文件,其中包含MyAPI的一些定义。这些事情清楚地表明,只有ProviderNew才实现MyAPI的客户端代理代码。

我现在的问题是,由于IProvider接口了MyAPI签名,因此系统希望这两个实现类(Provider和ProviderNew)都为MyAPI实现客户端代码,但事实并非如此,因为只有ProviderNew才为MyAPI添加了定义。当我尝试仅在Provider.cs中实现MyAPI客户端代码时,我看到一条错误消息-

Provider.ProviderServiceReference.ProviderServiceClient不包含'MyAPI'的定义,并且找不到扩展方法'MyAPI'接受类型为'Provider.ProviderServiceReference.ProviderServiceClient'的第一个参数(您是否缺少using指令或程序集引用?) MyPath .. \ Provider.cs

但是,当我离开而未在Provider.cs中实现它们时,我看到一个错误(这是一个经典情况,每个实现接口的类(如果有多个实现),都应该自己单独实现其所有功能,而不是子集功能)。

'提供者'未实现接口成员'IProvider.MyAPI(int,int)'MyPath ... Provider.cs

我已尽力使这一点尽可能清楚,让我知道更多。

我该如何进行?有什么建议 ?

提姆

实现类无法选择要实现的接口部分-全部或全部。从WCF的角度来看,如果要为一个客户端而不是另一个客户端添加操作(方法),那么您正在查看的是两种服务,而不是一种。

例如,假设您具有以下合同:

[ServiceContract]
public interface IProvider
{

    [OperationContract]
    int MyApiCall_1(string param);

    [OperationContract]
    string MyApiCall_2(int number);
}

由提供商(最初)实施。所有客户都可以使用这项服务。

现在,假设您的一个客户端需要访问MyApiCall_3,而其他客户端则不需要。正如您所发现的,对于所有不需要MyApiCall_3的客户端来说,这将是一项重大变化。

可以简单地更新服务-但是所有客户端都可以访问MyApiCall_3,也许您出于某种原因不希望这样做。

另一种选择是创建另一个源自原始合同的合同(接口),如下所示:

[ServiceContract]
public interface INewProvider : IProvider
{

    [OperationContract]
    double MyApiCall_3();
}

然后,您将在新服务中实现合同(为简单起见,我们称之为NewProvider)。需要额外API调用的客户端将使用NewProvider,其他客户端将使用较旧的客户端Provider

简而言之,如果您要向合同添加功能,则可以:

1.使原始合同中具有其他功能,从而所有客户都可以使用它,或者
2.创建一个继承自原始合同的新合同,并通过新服务将其公开,然后只有需要其他功能的客户端才能使用该新服务。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Java使用一个接口在两个类中实现不同的方法

来自分类Dev

Java使用一个接口在两个类中实现不同的方法

来自分类Dev

一个类实现两个接口。方法属于哪个接口?

来自分类Dev

如何保证一个类在C#中实现特定的接口

来自分类Dev

反映一个类,在接口和已实现的类中重现方法?

来自分类Dev

如何从实现这两个接口的类访问在两个接口之间定义的参数和方法?

来自分类Dev

仅当第一个对象实现第二个对象所需的接口时,才在C#中如何在运行时编写两个对象?

来自分类Dev

创建一个在运行时实现接口的类(例如代理类)

来自分类Dev

一个类可以在PHP中实现几个接口?

来自分类Dev

如果我有两个接口,那么一个类可以继承两个接口吗?

来自分类Dev

如何为一个类中的两个服务分别生成WCF代理代码?

来自分类Dev

在Grails中,指定应使用实现同一接口的两个类中的哪个进行注入

来自分类Dev

我可以在C ++中创建一个匿名的即时类(接口的实现)吗

来自分类Dev

使用@PROFILE管理一个Spring接口的两个或多个实现

来自分类Dev

一个类继承了另一个类并符合协议-试图调和两个接口

来自分类Dev

类设计:实现一个接口的类实现另一个接口

来自分类Dev

类设计:实现一个接口的类实现另一个接口

来自分类Dev

在一个类字段中处理一个Spring Bean /接口的几种实现

来自分类Dev

我怎样才能让一个类实现一个接口...(C ++)

来自分类Dev

我怎样才能让一个类实现一个接口...(C ++)

来自分类Dev

如何定义实现两个接口的泛型类?

来自分类Dev

具有两个类型约束和接口实现的泛型类

来自分类Dev

一个类如何同时扩展和实现其他类和接口?

来自分类Dev

拥有一个ObjectFactory接口和实现该接口的类是否是一个好的设计

来自分类Dev

c#将两个vars对象存储在一个var对象中

来自分类Dev

如何在 C# 中创建一个填充两个 DataGridView 的函数

来自分类Dev

如何在两个文件中拥有一个类和超类(Typescript)

来自分类Dev

如何在两个文件中拥有一个类和超类(Typescript)

来自分类Dev

我想使用由另一个类实现的接口来调用函数,而不用在 C# 中创建该类的实例

Related 相关文章

  1. 1

    Java使用一个接口在两个类中实现不同的方法

  2. 2

    Java使用一个接口在两个类中实现不同的方法

  3. 3

    一个类实现两个接口。方法属于哪个接口?

  4. 4

    如何保证一个类在C#中实现特定的接口

  5. 5

    反映一个类,在接口和已实现的类中重现方法?

  6. 6

    如何从实现这两个接口的类访问在两个接口之间定义的参数和方法?

  7. 7

    仅当第一个对象实现第二个对象所需的接口时,才在C#中如何在运行时编写两个对象?

  8. 8

    创建一个在运行时实现接口的类(例如代理类)

  9. 9

    一个类可以在PHP中实现几个接口?

  10. 10

    如果我有两个接口,那么一个类可以继承两个接口吗?

  11. 11

    如何为一个类中的两个服务分别生成WCF代理代码?

  12. 12

    在Grails中,指定应使用实现同一接口的两个类中的哪个进行注入

  13. 13

    我可以在C ++中创建一个匿名的即时类(接口的实现)吗

  14. 14

    使用@PROFILE管理一个Spring接口的两个或多个实现

  15. 15

    一个类继承了另一个类并符合协议-试图调和两个接口

  16. 16

    类设计:实现一个接口的类实现另一个接口

  17. 17

    类设计:实现一个接口的类实现另一个接口

  18. 18

    在一个类字段中处理一个Spring Bean /接口的几种实现

  19. 19

    我怎样才能让一个类实现一个接口...(C ++)

  20. 20

    我怎样才能让一个类实现一个接口...(C ++)

  21. 21

    如何定义实现两个接口的泛型类?

  22. 22

    具有两个类型约束和接口实现的泛型类

  23. 23

    一个类如何同时扩展和实现其他类和接口?

  24. 24

    拥有一个ObjectFactory接口和实现该接口的类是否是一个好的设计

  25. 25

    c#将两个vars对象存储在一个var对象中

  26. 26

    如何在 C# 中创建一个填充两个 DataGridView 的函数

  27. 27

    如何在两个文件中拥有一个类和超类(Typescript)

  28. 28

    如何在两个文件中拥有一个类和超类(Typescript)

  29. 29

    我想使用由另一个类实现的接口来调用函数,而不用在 C# 中创建该类的实例

热门标签

归档