Как обнаружить, если Типом является сгенерированный DynamicProxy, не ссылаясь на замок DynamicProxy?

Я использую замок DynamicProxy и задавался вопросом, существует ли способ обнаружить, если Тип является прокси, не ссылаясь на замок DynamicProxy?

Таким образом, в то время как я использую замок 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....);

Спасибо

7
задан Simon 25 July 2019 в 11:29
поделиться

4 ответа

пока что у меня есть этот уродливый код

    private static bool IsDynamic(Type type)
    {
        try
        {
            var location = type.Assembly.Location;
            return false;
        }
        catch (NotSupportedException)
        {
            return true;
        }
    }
0
ответ дан 6 December 2019 в 19:40
поделиться
type.Assembly.FullName.StartsWith("DynamicProxyGenAssembly2")
10
ответ дан 6 December 2019 в 19:40
поделиться

Похоже, это работает для Касла:

private static bool IsDynamic(Type type)
{
    return type.Namespace == null;
}
0
ответ дан 6 December 2019 в 19:40
поделиться

Вы можете сделать так, чтобы ваш динамический тип реализовывал определенный интерфейс:

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
ответ дан 6 December 2019 в 19:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: