如何在不引用Castle DynamicProxy的情况下检测Type是否是生成的DynamicProxy?

时间:2009-07-28 11:01:50

标签: .net reflection castle castle-dynamicproxy

我正在使用城堡DynamicProxy并且想知道是否有一种方法可以检测Type是否是代理而不引用Castle DynamicProxy?

因此,当我使用Castle DynamicProxy作为示例时,我希望代码可以用于任何内存生成类型。

var generator = new ProxyGenerator();


var classProxy = generator.CreateClassProxy<Hashtable>();
Debug.WriteLine(classProxy.GetType().Is....);


var interfaceProxy = generator.CreateInterfaceProxyWithoutTarget<ICollection>();
Debug.WriteLine(interfaceProxy.GetType().Is....);

由于

4 个答案:

答案 0 :(得分:9)

type.Assembly.FullName.StartsWith("DynamicProxyGenAssembly2")

答案 1 :(得分:3)

您可以使动态类型实现特定的接口:

public interface IDynamicProxy { }

...

ProxyGenerator generator = new ProxyGenerator();

var classProxy = generator.CreateClassProxy(typeof(Hashtable), new[] {typeof(IDynamicProxy)});
Debug.WriteLine(classProxy is IDynamicProxy);


var interfaceProxy = generator.CreateInterfaceProxyWithoutTarget(typeof(ICollection), new[] { typeof(IDynamicProxy) });
Debug.WriteLine(interfaceProxy is IDynamicProxy);

答案 2 :(得分:0)

到目前为止,我有这个令人讨厌的代码

    private static bool IsDynamic(Type type)
    {
        try
        {
            var location = type.Assembly.Location;
            return false;
        }
        catch (NotSupportedException)
        {
            return true;
        }
    }

答案 3 :(得分:0)

这似乎适用于Castle:

private static bool IsDynamic(Type type)
{
    return type.Namespace == null;
}
相关问题