我正在使用城堡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....);
由于
答案 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;
}