2011-09-19 47 views
0

我有List<Type>,這裏Type是我使用反射的界面。 那麼如何在這些Type上使用channnel工廠創建wcf代理。在System.Type上創建動態代理

,如:

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

這裏t是接口,但上面的代碼是給編譯器error.Can有人告訴我如何在類型創建WCF服務代理。

回答

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); 
} 
+0

THX使用上面的代碼即時得到編譯器錯誤爲「找到隱式類型的數組沒有最好類型的」快速reply.While。 – Geeta

+0

我已更新我的答案。只需寫入'new object []'而不是'new []' – Jan

+0

通過將它作爲新對象[] {new NetTcpBinding(),new EndpointAddress(serviceAddress)} – Geeta