【发布时间】:2014-03-13 06:01:11
【问题描述】:
我正在研究 ClientBase 和 ChannelFactory 的使用模式,但有一点我无法理解。
在大多数示例中,我们都有这种用法
public class MyClient : ClientBase<IMySvcContract>, IMySvcContract {
// IMySvcContract Interface method
public string MyOperation(int param)
{
return this.Channel.MyOperation(param);
}
}
这是一个客户端通过通道调用服务方法的示例。然而,当我仔细观察时,ClientBase 没有任何MyOperation() 的实现,它只知道IMySvcContract 中定义的公共接口。
因此,当调用this.Channel.MyOperation() 时,它实际运行的是哪个代码块? 它是否在运行时生成了实现 TChannel 的代码?如果是这样,这种模式还能如何实现?”
编辑:在最简单的情况下,只有 2 个类实现了 ISvcContract,Client 和 Server。模式创建对象和类型转换为接口类型都没有意义,这是获取我所知道的实际代码的唯一可能方法。
编辑2:经过进一步研究,我现在了解到可以在运行时生成一个实现TChannel 接口的类。这种程度的运行时代码生成对我来说是新的。 Reference。结果,问题略有变化。
【问题讨论】:
标签: c# wcf generics inheritance interface