我正在使用 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....);
谢谢
type.Assembly.FullName.StartsWith("DynamicProxyGenAssembly2")
您可以使动态类型实现特定接口:
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);
到目前为止我有这个丑陋的代码
private static bool IsDynamic(Type type)
{
try
{
var location = type.Assembly.Location;
return false;
}
catch (NotSupportedException)
{
return true;
}
}
这似乎对 Castle 有用:
private static bool IsDynamic(Type type)
{
return type.Namespace == null;
}
十五年后...您可以测试装配体是否是动态的,如下例所示。显然,自 .Net Framework 4.0 以来,这一直在框架中
if (type.Assembly.IsDynamic)
{
...
}