如果您使用ClientBase <t>?</t>有多个接口,如何创建代理

时间:2014-08-22 23:48:44

标签: c# wcf

我有一个托管的服务有两个接口A和B.我尝试使用ClientBase为我的客户端实现代理类。但是,我不知道如何宣布它。

这是我认为的应该是:

public class ServiceProxy : ClientBase<IA>, ClientBase<IB>, IA, IB
{
.......
}

这是宣布它的正确方法吗?如果没有,那么正确的方法是什么?谢谢。

2 个答案:

答案 0 :(得分:3)

无法从C#中的两个基类继承。

您可以做的是使用合成来创建一个实现接口的类,并将实现委托给两个实例成员:ClientBase<IA>ClientBase<IB>

但是一旦你这样做,你必须问问自己为什么要那样做。为什么不能单独使用两个代理。我能提出的唯一原因是你应用Façade pattern

答案 1 :(得分:1)

这是通过将每个实例保持为私有属性并实现接口方法/属性来访问私有实例来克服多重继承问题的一种方法。 (在这种情况下,无法确定这对您有用,具体取决于实例化服务代理的工厂类型。)在这种情况下,我猜测IA和IB可能有一些具有相同签名的方法,在这种情况下,您需要使用显式接口实现来避免冲突。

public class ServiceProxy : IA, IB
{
    private ClientBase<IA> IAProxy {get;set;}
    private ClientBase<IB> IBProxy {get;set;}    


    public void IA.SomeInterfaceMethod(){   
      IAProxy.SomeInterfaceMethod();
    }

    public void IB.SomeInterfaceMethod(){   
      IBProxy.SomeInterfaceMethod();
    }
}