渠道工厂如何.创建频道工作

本文关键字:创建 频道 工作 工厂 | 更新日期: 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 方法返回了什么样的对象,它如何构造一个动态对象,该对象能够实现它在运行时之前不知道的接口?

渠道工厂如何<T>.创建频道工作

ChannelFactory.CreateChannel() 返回 RealProxy 的实现,RealProxy 是一组工具的一部分,通常称为 TransparentProxy 或"Remoting",这是一种稍微过时的 wcf 前技术。为了创建实现接口的实际类,它归结为一个名为RemotingServices.CreateTransparentProxy(...)的内部框架级方法,我没有看过,但它很可能是某种类生成器/发射器。

正如你所问的,你可能想自己做这样的事情。要在运行时实现接口,我推荐 Castle 动态代理,它毫不费力地实现接口或抽象类。