我可以使用Linfu动态代理来代理具有通用参数的接口吗?

时间:2012-11-22 14:07:24

标签: c# dynamic-proxy linfu-dynamicproxy

我目前正在使用Linfu来创建动态代理,它对普通接口非常有效。问题是我现在需要为具有通用参数的接口创建动态代理。我不知道通用参数的类型(甚至加载包含它们的程序集)直到运行时。有谁知道这是否可能?

1 个答案:

答案 0 :(得分: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的行中。