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

问题描述 投票:0回答:5

我正在使用 castle 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....);

谢谢

.net reflection castle castle-dynamicproxy
5个回答
10
投票
type.Assembly.FullName.StartsWith("DynamicProxyGenAssembly2")

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);

0
投票

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

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

0
投票

这似乎对 Castle 有用:

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

0
投票

十五年后...您可以测试装配体是否是动态的,如下例所示。显然,自 .Net Framework 4.0 以来,这一直在框架中

if (type.Assembly.IsDynamic)
{
    ...
}
© www.soinside.com 2019 - 2024. All rights reserved.