2014-07-03 34 views
0

通用類屬性調用WCF方法我有下面的類:與反射

Public Class WcfClient(Of T) 

     Private _Cliente As T 

     Public ReadOnly Property Client As T 
      Get 
       Return _Cliente 
      End Get 
     End Property 

T,表示WCF頻道,也就是像這樣創建的:

Dim channel As New ChannelFactory(Of T)(basicHttpBinding, remoteAddress) 
'Set the property 
_Cliente = channel.CreateChannel() 

現在,隨着反射,我正在創建一個WcfClient的實例,並且我想執行一個位於客戶端屬性中的方法。

Type tipo = FindInterface(Request.GetFriendlyUrlSegments()[0]); 
Type genType = typeof (WcfClient<>).MakeGenericType(tipo); 
var client = Activator.CreateInstance(genType);  
var clientProp = client.GetType(). 
       GetProperties().Where(p => p.Name == "Client").FirstOrDefault(); 

if (clientProp != null) 
{ 

    var method =clientProp.PropertyType 
        .GetMethod(Request.GetFriendlyUrlSegments()[1]); 
    ProcesoBase procesoBase = new ProcesoBase(); 

    foreach (var prop in typeof (ProcesoBase).GetProperties()) 
    { 
      //Here we have some code to fill ProcesoBase properties 

     } 

    } 

    var result = method.Invoke(clientProp, new object[] { procesoBase }); 

當調用method.Invoke我得到Object does not match target type異常

我從clientProp變量獲取MethodInfo的類,所以我不明白這是怎麼發生的。

難道這是因爲生成的Channel類構建爲proxy_TransparentProxy類嗎?

回答

0

好吧,我解決它通過讓使用的GetValue客戶屬性而不是使用的GetProperties:

PropertyInfo p = client.GetType().GetProperty("Client"); 
    MethodInfo m = p.PropertyType.GetMethod(Request.GetFriendlyUrlSegments()[1]); 
    object clientProp = p.GetValue(client);