【15】 反射动态替代泛型

通过类的名称反射类替代泛型

ProtocolBuffersMessageDecoder类中有泛型方法DecodeMessage

public class ProtocolBuffersMessageDecoder : IMessageDecoder
    {
        public ProtocolBuffersMessageDecoder();

        public T DecodeMessage<T>(byte[] data);
    }

public interface IMessageDecoder
    {
        T DecodeMessage<T>(byte[] data);
    }
IMessageDecoder _decoder = new ProtocolBuffersMessageDecoder();
System.Net.WebRequest wReq = System.Net.WebRequest.Create(Url);
wReq.Method = "GET";
// Get the response instance.
System.Net.WebResponse wResp = wReq.GetResponse();
System.IO.Stream stream = wResp.GetResponseStream();
                
byte[] body = StreamToBytes(stream);
var asm = Assembly.LoadFile(ConfigurationManager.AppSettings["FeedContractsDLLPath"]);
Type tObject = asm.GetType(ConfigurationManager.AppSettings["ReflectClassFullName"]);
MethodInfo method = typeof(IMessageDecoder).GetMethod("DecodeMessage", new Type[] { typeof(byte[])});
MethodInfo generic = method.MakeGenericMethod(tObject);
var cases = generic.Invoke(_decoder, new object[] { body });
//var cases = _decoder.DecodeMessage<CaseProfileCollection>(body);
var result = JsonConvert.SerializeObject(cases);
return result;
public static byte[] StreamToBytes(Stream stream)
        {
            List<byte> bytes = new List<byte>();
            int temp = stream.ReadByte();
            while (temp != -1)
            {
                bytes.Add((byte)temp);
                temp = stream.ReadByte();
            }


            return bytes.ToArray();
        }

配置

    <appSettings>
      <add key="url" value="http://www.baidu.com"/>
      <add key="FeedContractsDLLPath" value="F:\\working\\FeedContracts.dll" />
      <add key="ReflectClassFullName" value="FeedContracts.CaseProfileCollection" />
    </appSettings>

FeedContracts.CaseProfileCollection为FeedContracts下的一个class

原本需要在代码中用FeedContracts显示的替代泛型可以通过配置动态进行改变



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值