渠道工厂如何.创建频道工作
本文关键字:创建 频道 工作 工厂 | 更新日期: 2023-09-27 18:30:59
如果我有一个接口:
public interface ISomething
{
void DoAThing();
}
然后我用 ChannelFactory 实例化它:
var channel = new ChannelFactory<ISomething>().CreateChannel
我得到了一个可以使用的实例。
现在,要关闭它,我需要投射:
((IClientChannel)channel).Close
或
((IChannel)channel).Close
或
((ICommunicationObject)channel).Close
我的 ISomething 接口不继承任何这些接口。
那么 CreateChannel 方法返回了什么样的对象,它如何构造一个动态对象,该对象能够实现它在运行时之前不知道的接口?
ChannelFactory.CreateChannel() 返回 RealProxy 的实现,RealProxy 是一组工具的一部分,通常称为 TransparentProxy 或"Remoting",这是一种稍微过时的 wcf 前技术。为了创建实现接口的实际类,它归结为一个名为RemotingServices.CreateTransparentProxy(...)的内部框架级方法,我没有看过,但它很可能是某种类生成器/发射器。
正如你所问的,你可能想自己做这样的事情。要在运行时实现接口,我推荐 Castle 动态代理,它毫不费力地实现接口或抽象类。