代码之家  ›  专栏  ›  技术社区  ›  Simon Randy Burden

如何在不引用castle dynamicproxy的情况下检测类型是否为生成的dynamicproxy?

  •  6
  • Simon Randy Burden  · 技术社区  · 15 年前

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

    谢谢

    4 回复  |  直到 9 年前
        1
  •  9
  •   Farhad Jabiyev    9 年前
    type.Assembly.FullName.StartsWith("DynamicProxyGenAssembly2")
    
        2
  •  3
  •   Jeff Cyr    15 年前

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

    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);
    
        3
  •  0
  •   Simon Randy Burden    15 年前

    到目前为止,我有一个简单的密码

        private static bool IsDynamic(Type type)
        {
            try
            {
                var location = type.Assembly.Location;
                return false;
            }
            catch (NotSupportedException)
            {
                return true;
            }
        }
    
        4
  •  0
  •   Dmitriy Nagirnyak    15 年前

    这似乎对Castle有用:

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