C# 渠道工厂是如何运作的<;T>;。创建频道工作?
如果我有一个接口:C# 渠道工厂是如何运作的<;T>;。创建频道工作?,c#,wcf,C#,Wcf,如果我有一个接口: public interface ISomething { void DoAThing(); } 然后我用ChannelFactory实例化它: var channel = new ChannelFactory<ISomething>().CreateChannel 或 或 MyISomething接口不继承这些接口中的任何一个 那么,CreateChannel方法返回了什么类型的对象?它是如何构造一个动态对象的,能够实现一个在运行时才知道的接口的?返
public interface ISomething
{
void DoAThing();
}
然后我用ChannelFactory实例化它:
var channel = new ChannelFactory<ISomething>().CreateChannel
或
或
MyISomething接口不继承这些接口中的任何一个
那么,CreateChannel方法返回了什么类型的对象?它是如何构造一个动态对象的,能够实现一个在运行时才知道的接口的?返回一个实现,它是通常称为TransparentProxy或“Remoting”的一组工具的一部分,这是一种稍微过时的预wcf技术。为了创建实现接口的实际类,它归结为一个名为.CreateTransparentProxy(…)的内部框架级方法,我没有看过,但它很可能是某种类型的类生成器/发射器
正如你所要求的,你可能想自己做类似的事情。要在运行时实现接口,我建议使用无需太多努力即可实现接口或抽象类的接口。如果您喜欢使用dotPeek或Reflector之类的反编译器,您可以自己深入兔子洞看看……我认为它不是一个
动态的对象,只是一个生成的对象。在.NET中生成代码相对容易。至于解释“内部框架级方法”,这里有一个很好的回答
((IClientChannel)channel).Close
((IChannel)channel).Close
((ICommunicationObject)channel).Close