Найти все классы с атрибутом, содержащим определенное значение свойства

Можно ли найти класс, помеченный пользовательским атрибутом на основе значения, данного этому атрибуту?

В принципе, у меня есть классы, которые выглядят так -

[MyAttr("CODE")]
public class MyClass() {}

Оттуда я получаю все классы (Типы) -

var c = Assembly.GetExecutingAssembly().GetTypes().Where
                        (
                            t => t.IsClass && 
                            t.Namespace == (typeof(AbstractParentClass)).Namespace &&
                            t.IsSubclassOf(typeof(AbstractParentClass))
                        );

Это все, кажется, работает. c содержит все соответствующие классы. Теперь мне нужно получить класс из c , который имеет атрибут MyAttr и значение «CODE». Значение доступно через свойство в MyAttr с именем Id .

Это была моя попытка -

var message = from m in c
                  from a in m.GetCustomAttributes(typeof(MyAttr), false)
                  where ((MyAttr)a).Id == "CODE"
              select m;

Это не сработало. Итак, реальный вопрос в том, возможно ли это вообще, и если да, то что нужно изменить, чтобы получить соответствующий класс (и создать его экземпляр).

Мне нужно добавить два настраиваемых фильтра для FORM_LOGIN_FILTER, например

<custom-filter after="FORM_LOGIN_FILTER" ref="myUsernamePasswordAuthenticationFilter" />
<custom-filter after="FORM_LOGIN_FILTER" ref="myUsernamePasswordAuthenticationFilter2" />

. Я ожидаю, что последовательности фильтров:
1. Предопределите FORM_LOGIN_FILTER
2. myUsernamePasswordAuthenticationFilter
3. myUsernamePasswordAuthenticationFilter2

Но выше приведёт к ошибке конфигурации. Итак, кто-нибудь знает, как написать правильный конфиг? Спасибо!

12
задан Paganini 26 August 2010 в 15:52
поделиться

1 ответ

Сделайте следующее:

<custom-filter after="FORM_LOGIN_FILTER" ref="myUsernamePasswordAuthenticationFilter" />
<custom-filter before="BASIC_AUTH_FILTER" ref="myUsernamePasswordAuthenticationFilter2" />

Это должно разместить их там, где вы хотите.

6
ответ дан 2 December 2019 в 03:22
поделиться
Другие вопросы по тегам:

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