Как я могу использовать пользовательский атрибут в классе DynamicProxy - PullRequest
2 голосов
/ 28 апреля 2011

Я попытался назначить пользовательский Атрибут для класса, который приходит от динамического прокси

System.Data.Entity.DynamicProxies.Login_A2947F53...

Пример класса Логин

public partial class Login
{
    [CustomAttribute]
    public virtual int Id
    {
        get;
        set;
    }
}

Теперь я пытаюсь получить доступ к Атрибуту с помощью Обобщения и Отражения

public static void Process(TSource source)
{
    foreach (PropertyInfo p in target.GetType().GetProperties(flags))
    {
        object[] attr = p.GetCustomAttributes(true); // <- empty
    } 
}

Но Атрибута нет. Это из-за DynmaicProxy или что я тут не так сделал?

Когда я использую конкретный класс без динамического прокси, как этот, я получаю атрибуты.

public class TestObject
{
    [CustomAttribute]
    public virtual string Name { get; set; }
    [CustomAttribute]
    public virtual string Street { get; set; }
    public virtual int Age { get; set; }
    public virtual string Something { get; set; }
}

Ответы [ 2 ]

1 голос
/ 03 февраля 2012

Использование BaseType .

public static void Process(TSource source)
{
    foreach (PropertyInfo p in target.GetType().BaseType.GetProperties(flags))
    {
        object[] attr = p.GetCustomAttributes(true);
    } 
}
1 голос
/ 28 апреля 2011

ОК, этот был очевиден при ближайшем рассмотрении;

System.Data.Entity.DynamicProxies.Login_A2947F53...

является типом dynamicProxy и ничего не знает ни о каких атрибутах.Поэтому я должен использовать что-то вроде:

foreach (PropertyInfo p in typeof(Login).GetProperties(flags))

вместо экземпляра dynamicProxy для получения типа.И наконец, есть мои атрибуты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...