![](/img/trans.png)
[英]Does ChannelFactory.CreateChannel() actually open connection?
[英]How does the ChannelFactory<T>.CreateChannel work?
如果我有一個界面:
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的一個實現,它是一組工具的一部分,通常稱為TransparentProxy或“Remoting”,這是一個稍微過時的pre-wcf技術。 為了創建實現接口的實際類,它歸結為一個名為RemotingServices .CreateTransparentProxy(...)的內部框架級方法,我沒有看過,但很可能是某些類的類構建器/發射器。
正如你所問,你可能想要自己做這樣的事情。 要在運行時實現接口,我建議使用Castle Dynamic Proxy來實現接口或抽象類而不需要太多努力。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.