用反射调用泛型类属性中的WCF方法
本文关键字:WCF 方法 属性 反射 调用 泛型类 | 更新日期: 2023-09-27 18:11:12
我有以下类:
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的实例,并且我想执行一个在Client属性内的方法。
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 });
调用方法时。调用I am getting Object does not match target type
in exception
我正在从clientProp变量中获取MethodInfo类,所以我不知道这是如何发生的。
这可能是因为生成的通道类被构建为proxy_TransparentProxy类吗?
好的,我通过使用GetValue而不是使用GetProperties获取客户端属性来解决这个问题:
PropertyInfo p = client.GetType().GetProperty("Client");
MethodInfo m = p.PropertyType.GetMethod(Request.GetFriendlyUrlSegments()[1]);
object clientProp = p.GetValue(client);