在System.Type上创建动态代理

时间:2011-09-19 09:22:03

标签: c# wcf reflection

我有List<Type>,这里Type是我使用反射的界面。 那么如何使用这些Type上的channnel工厂创建wcf代理。

喜欢:

foreach(Type t in types)
{
t proxy = ChannelFactory<t>.CreateChannel(new NetTcpBinding(), 
             new EndpointAddress(serviceAddress));
}

这里是接口,但上面的代码给出了编译错误。任何人都可以告诉我如何在Type上创建wcf服务代理。

1 个答案:

答案 0 :(得分:3)

您可以使用反射并调用方法Type.MakeGenericType

foreach (Type t in types)
{
    Type genType = typeof(ChannelFactory<>).MakeGenericType(t);

    MethodInfo createChannelMethod = genType.GetMethod("CreateChannel", 
                                        new[] { typeof(Binding),
                                                typeof(EndpointAddress) });

    var proxy = createChannelMethod.Invoke(
                                null, 
                                BindingFlags.Static, 
                                null, 
                                new object[] { 
                                    new NetTcpBinding(), 
                                    new EndpointAddress(serviceAddress) 
                                }, 
                                null);
}