我目前正在使用 Linfu 创建动态代理,它对于普通接口非常有效。问题是我现在需要为具有通用参数的接口创建一个动态代理。直到运行时,我才知道泛型参数的类型(甚至加载包含它们的程序集)。有谁知道这是否可能?
问问题
234 次
1 回答
0
好的,我可以通过使用反射调用 MyProxyFactory.CreateProxy< T >() 来做到这一点:
Type myGenericParam1 = myParam1.GetType();
Type myGenericParam2 = myParam2.GetType();
Type myGenericInterfaceType = typeof(IMyInterface<,>);
Type myActualInterfaceType = myGenericInterfaceType.MakeGenericType(myGenericParam1, myGenericParam2);
var proxyObjectContainer = typeof(MyProxyFactory).GetMethod("CreateProxy", new Type[] { }).MakeGenericMethod(new[] { myActualInterfaceType }).Invoke(null, new object[] { });
var proxyObject = proxyObjectContainer.GetType().GetProperty("Proxy").GetValue(proxyObjectContainer, null);
显然,如果您需要将参数传递给代理工厂构造函数以设置拦截器,那么这也需要添加到创建 proxyObjectContainer 的行中。
于 2012-11-26T16:12:09.613 回答