7

我正在使用城堡 DynamicProxy 并且想知道是否有一种方法可以在不引用 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

4 回答 4

10
type.Assembly.FullName.StartsWith("DynamicProxyGenAssembly2")
于 2009-07-29T00:25:37.050 回答
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);
于 2009-08-31T20:49:17.817 回答
0

到目前为止,我有这个丑陋的代码

    private static bool IsDynamic(Type type)
    {
        try
        {
            var location = type.Assembly.Location;
            return false;
        }
        catch (NotSupportedException)
        {
            return true;
        }
    }
于 2009-07-28T13:43:58.650 回答
0

这似乎适用于城堡:

private static bool IsDynamic(Type type)
{
    return type.Namespace == null;
}
于 2009-07-28T23:36:09.833 回答